码迷,mamicode.com
首页 > 移动开发 > 详细

Android中Handler警告的解决办法

时间:2015-02-27 00:13:29      阅读:2296      评论:0      收藏:0      [点我收藏+]

标签:

经常,在我们使用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);

Android中Handler警告的解决办法

标签:

原文地址:http://www.cnblogs.com/BoBoMEe/p/4302393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!