利用消息传递机制实现子线程与主线程通信,完成自动变化界面背景颜色的功能。掌握Handler类的使用方法,重点学习handmessage() 和sendEmptyMessage()方法在程序中的应用。
时间: 2024-02-01 20:15:47 浏览: 145
在 Android 开发中,我们通常需要在子线程中执行一些耗时的操作,例如网络请求、文件读写等。但是,由于 Android 系统的限制,我们不能在子线程中直接更新 UI 界面,否则会引发异常。因此,我们需要利用消息传递机制实现子线程与主线程通信,从而完成自动变化界面背景颜色的功能。
在 Android 中,可以使用 Handler 类来实现消息传递机制。Handler 类是 Android 系统中的一个重要类,它可以用来发送和处理消息。具体来说,我们可以在子线程中创建一个 Handler 对象,并使用 sendEmptyMessage() 方法向主线程发送一个空消息,然后在主线程中重写 Handler 的 handleMessage() 方法,接收并处理该消息。
下面是一个示例代码,演示了如何利用 Handler 实现子线程与主线程通信,自动变化界面背景颜色的功能:
```
public class MainActivity extends AppCompatActivity {
private static final int MSG_CHANGE_COLOR = 1;
private Handler mHandler;
private View mRootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRootView = findViewById(R.id.root_view);
// 创建 Handler 对象
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_CHANGE_COLOR:
// 改变界面背景颜色
mRootView.setBackgroundColor(Color.rgb(
(int) (Math.random() * 255),
(int) (Math.random() * 255),
(int) (Math.random() * 255)));
break;
default:
super.handleMessage(msg);
break;
}
}
};
// 在子线程中发送消息
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
mHandler.sendEmptyMessage(MSG_CHANGE_COLOR);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
```
在该代码中,首先我们在 onCreate() 方法中获取了根视图 mRootView,并创建了一个 Handler 对象 mHandler。然后,在子线程中通过循环不断调用 mHandler.sendEmptyMessage() 方法向主线程发送消息,间隔时间为 1 秒。
在主线程中,我们重写了 Handler 的 handleMessage() 方法,根据接收到的消息类型改变界面背景颜色。当接收到 MSG_CHANGE_COLOR 消息时,我们使用 Math.random() 方法生成一个随机的 RGB 颜色值,并将其设置为 mRootView 的背景颜色。
这样一来,我们就实现了子线程与主线程的通信,成功地完成了自动变化界面背景颜色的功能。
阅读全文