Android中Handler警告的解决办法

经常,在我们使用Handler的时候,会出现This Handler class should be static or leaks might occur,对于有代码洁癖的人.来说时忍受不了的.

那么我们该怎么解决呢?

查阅了很多文章,大致的解释是:在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类(通常是Activity或者Service等)的引用。只要有消息在队列中,那么Handler便无法被回收,如果Handler不是static那么使用Handler的Service和Activity就也无法被回收,这就可能导致内存泄露。

一般我们是在Handler中保持一个外部类的弱引用

//声明一个static class,继承自Handler,
    //并持有外部类的弱引用(此时假设外部类是ParentActivity)
    private static class MyHandler extends Handler {
        WeakReference mOuterClass;
        MyHandler(OuterClass clz) {
                mOuterClass clz= new WeakReference(clz);
        }
        @Override
        public void handleMessage(Message msg) {
              OuterClass clz= mOuterClass.get();
            switch (msg.what) {
            case SOMETHING:
                clz.doSomething();
                break;
            defaule:
                break;
            }
        }
    };
 
    //然后声明,之后使用handler即可
    private MyHandler handler = new MyHandler(this);

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。