该文档介绍了我在android studio开发中使用的一些常用和实用的技术,包括intent 广播机制,runOnUiThread,AlertDialog显示自定义布局文件问题,横竖屏切换保存状态onSaveInstanceState ### Android开发笔记 #### Intent 广播机制 在Android应用开发过程中,经常需要实现不同组件间的通信,其中一种常见的通信方式就是使用`Intent`广播机制。`Intent`广播是一种允许发送一个`Intent`到所有已经注册接收器的应用或组件的方式。 ##### 定义继承BroadcastReceiver的广播类 在Android开发中,若希望实现组件间通信,则可以通过创建并继承`BroadcastReceiver`类的方式来完成。例如: ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("com.example.WIFI_ACTION")) { // 接收到广播后进行相应处理 // 这里可以是任何你需要执行的操作 } } } ``` 接下来需要在应用的配置文件(如`AndroidManifest.xml`)中注册这个广播接收器或者在运行时动态注册。 ##### 从Activity1通过Intent方式打开Activity2,并在打开之前注册广播 当Activity1需要向Activity2传递信息时,通常会先注册一个广播接收器,然后通过`Intent`发送数据。 ```java // Activity1中注册广播接收器 IntentFilter filter = new IntentFilter("com.example.WIFI_ACTION"); registerReceiver(myBroadcastReceiver, filter); // 启动Activity2 Intent intent = new Intent(this, Activity2.class); startActivity(intent); // 发送广播 Intent broadcastIntent = new Intent("com.example.WIFI_ACTION"); sendBroadcast(broadcastIntent); ``` 在Activity2中,可以通过监听特定的`Intent`来接收Activity1发送的数据。 ##### Activity2中通过发送广播让Activity1执行特定功能 Activity2通过发送广播给Activity1,Activity1接收到广播后执行特定的功能。比如Activity2想要调用Activity1中的连接WiFi功能,可以通过以下方式实现: ```java // Activity2中发送广播 Intent broadcastIntent = new Intent("com.example.WIFI_ACTION"); sendBroadcast(broadcastIntent); ``` Activity1接收到此广播后,执行连接WiFi的功能。 #### runOnUiThread 在Android应用开发中,UI线程是非常重要的,因为它负责绘制界面以及响应用户的交互事件。为了避免在非UI线程中直接更新UI元素而引起的异常,Android提供了`runOnUiThread`方法。 ##### 在工作线程中访问UI控件 假设你在某个非UI线程中进行了一些耗时操作,如网络请求、数据库操作等,如果需要将结果显示在界面上,则需要使用`runOnUiThread`方法。具体实现如下: ```java new Thread(new Runnable() { @Override public void run() { // 执行耗时操作 // ... runOnUiThread(new Runnable() { @Override public void run() { // 更新UI textView.setText("数据已更新"); } }); } }).start(); ``` 这种方式可以确保UI更新操作在主线程中执行,避免出现`CalledFromWrongThreadException`异常。 #### AlertDialog 显示自定义布局文件问题 在Android中使用`AlertDialog`显示自定义布局文件时,可能会遇到一些问题。例如,尝试在`AlertDialog`中设置自定义视图时可能会抛出异常。为了解决这个问题,可以采用以下步骤: ```java View view = View.inflate(this, R.layout.layout_alert_dialog, null); AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.show(); // 先显示对话框 alertDialog.setContentView(view); // 再设置内容视图 ``` 这里的关键在于先调用`show()`方法再设置内容视图。这样可以避免抛出`AndroidRuntimeException`。 #### 横竖屏切换保存状态onSaveInstanceState 在Android应用中,为了保持用户数据的一致性,开发者需要处理屏幕旋转等导致的Activity重新创建的情况。这通常通过重写`onSaveInstanceState`和`onCreate`方法来实现。 ##### 保存 在Activity被销毁前(如屏幕旋转),系统会调用`onSaveInstanceState`方法,允许开发者保存当前状态。 ```java @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // 保存当前状态 outState.putInt("color", color); outState.putString("text", text); } ``` ##### 读取 当Activity重新创建时,可以在`onCreate`方法中恢复之前保存的状态。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { int color = savedInstanceState.getInt("color"); String text = savedInstanceState.getString("text"); // 使用保存的状态 } } ``` 以上方法可以帮助开发者更好地管理应用的状态,提高用户体验。
- 粉丝: 4
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助