Handler

2018-01-15  本文已影响12人  Neo_duan

Handler关联了一个Looper,而Looper里面关联了一个消息队列,Looper关联了Local本地线程
send消息,发Msg发送到队列中,启动looper循环,然后通过msg.target分发,msg.target就是Hnadler自己,然后调用它的handleMsg方法

内存泄露

使用静态内部类,并使用弱引用

new Thread() {
    @Override
    public void run() {
        super.run();
        
        //子线程中不能修改主UI的控件,列入Activity中的TextView等
        
        //子线程中可以弹出Toast和Dialog,只需要准备Looper即可
        Looper.prepare();
        showDialog();
        Toast.makeText(MainActivity.this, "text", Toast.LENGTH_SHORT).show();
        Looper.loop();
    }
}.start();

HandlerThread (里面封装了一个Looper,外界要配合Handler使用)

- extends Thread,开启Thread子线程进行耗时操作,避免多次创建线程
- Handler + Thread + Looper
- 通过获取HandlerThread的Looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务
- 优点:不会有堵塞,减少了对性能的消耗
- 缺点:不能同时进行多任务处理,需要等待进行处理,处理效率低
上一篇下一篇

猜你喜欢

热点阅读