Android线程间异步通信机制源码分析(4)

目前主要有两种解决方案:
•第一种,在activity关闭时,停掉该子线程,然后调用handler的removeCallbacks方法,把消息队列中的message删除掉。
•第二种,让匿名内部类作为一个静态内部类出现,这样就不持有activity的对象引用了,activity就可以被回收掉了。但是,不持有activity的引用,怎么操作其中的对象呢?只好自己声明一个弱引用了:

static class myHandler extends Handler {
    WeakReference<Activity > mActivityReference;

myHandler(Activity activity) {
        mActivityReference= new WeakReference<Activity>(activity);
    }

@Override
    public void handleMessage(Message msg) {
    //消息处理......
    }
}

弱引用在垃圾回收的时候会被忽略,所以可以被安全回收。个人比较倾向于第二种写法,比较简单。

总结

本文简单介绍了Android系统线程之间异步通信的机制,从源码的角度简单谈论了线程通信时的基本工作。其中未详细深入到messageQueue的具体管理操作,只是简单提及了message对象的回收,具体细节有空再补上。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/70ed5be6de341d62346977b4a5e06e88.html