用Android利用消息传递机制实现子线程与主线程通信,完成自动化变化界面背景颜色的功能
时间: 2023-12-03 12:45:46 浏览: 83
通过消息机制实现进程间的通信
好的,下面是详细的代码实现。
首先,在主线程中定义一个 Handler 对象,并覆写其 handleMessage() 方法:
```
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_CHANGE_COLOR:
int color = msg.arg1;
mRootView.setBackgroundColor(color);
break;
default:
break;
}
}
};
```
上述代码中,MSG_CHANGE_COLOR 是自定义的消息类型,用于指示要改变背景颜色。handleMessage() 方法中根据消息类型执行相应的操作,这里只有一种类型,即改变背景颜色。其中 msg.arg1 是消息携带的参数,即要改变的颜色值。
接下来,我们在子线程中发送消息,以触发主线程的 handleMessage() 方法。这里我们使用 Message.obtain() 方法获取一个 Message 对象,并设置其 what 和 arg1 属性:
```
private void changeColor(final int color) {
new Thread(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain();
msg.what = MSG_CHANGE_COLOR;
msg.arg1 = color;
mHandler.sendMessage(msg);
}
}).start();
}
```
上述代码中,changeColor() 方法是在子线程中执行的,它接收一个颜色值作为参数,然后创建一个新的线程,并在其中获取一个 Message 对象并设置其属性,最后使用 mHandler.sendMessage() 方法将消息发送到主线程。
最后,我们在 Activity 的 onCreate() 方法中调用 changeColor() 方法,即可实现自动化变化界面背景颜色的功能:
```
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
changeColor(Color.RED);
changeColor(Color.GREEN);
changeColor(Color.BLUE);
}
```
上述代码中,我们先设置了布局文件,然后依次调用 changeColor() 方法修改背景颜色为红、绿、蓝三种颜色。由于 changeColor() 方法是在子线程中执行的,因此它们不会阻塞主线程,而是通过消息传递机制与主线程通信,完成自动化变化界面背景颜色的功能。
阅读全文