- 今天看到的有意思的问题(如题)
- 其实就是对Handler的理解
- 上代码( 测试代码,有错请一定告知….)
public class MainActivity extends AppCompatActivity {
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("我是第一个handler,我收到了消息");
}
};
private Handler mHandler2 = new Handler(){
@Override
public void handleMessage(Message msg) {
Toast.makeText(MainActivity.this, "11111111", Toast.LENGTH_SHORT).show();
System.out.println("我是第二个handler,我收到了消息");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(){
@Override
public void run() {
mHandler.sendEmptyMessage(0);
Message obtain = Message.obtain();
}
}.start();
}
}
- 其实在主线程创建Handler 一般都是如上面的创建一样,(现在不考虑内存泄漏问题).如果没有像下面一样在构造方法中传入looper,是会自动绑定UI线程,而looper也就有自己对应的Message队列.也就是一对一的关系.
- 所以 上面 输出的话 只有mHandler收到了消息,会打印,其他的就不收到.
- 但是注意的的是,这两个handler都没有指定Looper,所以公用的是同一个Message队列,只是msg.target=当前的handler, 就只有当前的handler可以得到这个消息
private Handler mHandler3 = new Handler(looper){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
- 总结就是:
- 消息队列中的每一个Message都会绑定它自己的handler,只有自己的发送该消息的handler才能处理。
- 最后: 有不足一定指出….