`
coding1688
  • 浏览: 236842 次
  • 来自: 上海
社区版块
存档分类
最新评论

常被忽略的警告:This Handler class should be static or leaks might occur

 
阅读更多

在Android开发中,使用多线程处理时,如果需要通知界面需要用到Handler机制,如果不注意就会报如下警告信息:

This Handler class should be static or leaks might occur

在StackOverflow上有这样一篇文章讲到了这个问题(感谢何海英):

http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler

 

 

If IncomingHandler class is not static, it will have a reference to your Service object.

Handler objects for the same thread all share a common Looper object, which they post messages to and read from.

As messages contain target Handler, as long as there are messages with target handler in the message queue, the handler cannot be garbage collected. If handler is not static, your Service or Activity cannot be garbage collected, even after being destroyed.

This may lead to memory leaks, for some time at least - as long as the messages stay int the queue. This is not much of an issue unless you post long delayed messages.

You can make IncomingHandler static and have a WeakReference to your service:

static class IncomingHandler extends Handler {
    private final WeakReference<UDPListenerService> mService; 

    IncomingHandler(UDPListenerService service) {
        mService = new WeakRference<UDPListenerService>(service);
    }
    @Override
    public void handleMessage(Message msg)
    {
         UDPListenerService service = mService.get();
         if (service != null) {
              service.handleMessage(msg);
         }
    }
}

 

0
2
分享到:
评论

相关推荐

    Android Handler leak分析及解决办法详解

     In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its...

    进度条对话框:通过Handler实现

    这篇博客"进度条对话框:通过Handler实现"探讨了如何在Android中创建并更新一个进度条对话框,利用Handler机制来处理主线程与后台线程间的通信。 首先,ProgressDialog是Android提供的一个内置组件,它可以显示为...

    jobHandler调度器

    "JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,JobHandler是核心组件,它负责执行具体的业务逻辑。下面我们将详细探讨JobHandler调度器的...

    Pro Android学习:了解Handler小例子

    这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

    handler的使用案例

    demo01: 通过handler.post()的方法可以更新ui demo02: 一秒钟切换一张图片 demo03: 霓虹灯动态效果的显示 demo04: 倒计时,停止倒计时 demo05: 通过handler.sendMessage和handleMessage发送处理消息 demo06: message...

    netty-handler-4.1.65.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-handler:4.1.65.Final; 标签:netty、handler、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中...

    netty-handler-proxy-4.1.68.Final-API文档-中文版.zip

    赠送jar包:netty-handler-proxy-4.1.68.Final.jar; 赠送原API文档:netty-handler-proxy-4.1.68.Final-javadoc.jar; 赠送源代码:netty-handler-proxy-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-...

    Android源代码:HandlerDemo

    1. **创建Handler类**:自定义一个`Handler`子类,重写`handleMessage(Message msg)`方法,这个方法会在主线程中被调用,用于处理来自其他线程的消息。 2. **初始化Handler**:在Activity或Service的`onCreate()`...

    Fragment与Activity使用Handler进行交互

    private static class FragmentHandler extends Handler { private WeakReference&lt;MyFragment&gt; fragmentWeakReference; FragmentHandler(MyFragment fragment) { this.fragmentWeakReference = new ...

    Sortable前端框架

    This option sets the minimum pointer movement that must occur before the delayed sorting is cancelled. Values between 3 to 5 are good. --- #### `disabled` options Disables the sortable if set to ...

    netty-handler-4.1.73.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-handler:4.1.73.Final; 标签:handler、netty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-handler-4.1.68.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-handler:4.1.68.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    Class-ErrorHandler

    Class::ErrorHandler - 错误处理的基类 概要 package Foo; use base qw( Class::ErrorHandler ); sub class_method { my $class = shift; ... return $class-&gt;error("Help!") unless $continue; } sub object_...

    netty-handler-4.1.24.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-handler:4.1.24.Final; 标签:handler、netty、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...

    Handler使用

    private static class MyHandler extends Handler { WeakReference&lt;MainActivity&gt; weakRef; MyHandler(MainActivity activity) { weakRef = new WeakReference(activity); } @Override public void ...

    netty-handler-4.1.65.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-handler:4.1.65.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-handler-4.1.74.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-handler:4.1.74.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    Handler 推荐用法 demo

    在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是主线程(UI线程)与工作线程之间的交互。本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理...

    netty-handler-proxy-4.1.73.Final-API文档-中文版 (1).zip

    赠送jar包:netty-handler-proxy-4.1.73.Final.jar; 赠送原API文档:netty-handler-proxy-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-proxy-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-...

    Netty4.0学习笔记系列之二:Handler的执行顺序

    当我们调用 ChannelHandlerContext 的 `fireChannelRead()` 方法时,数据将被传递到下一个 Handler。这个过程会一直持续,直到数据到达 Pipeline 的末尾或者遇到一个处理数据的 Handler。 了解 Handler 的执行顺序...

Global site tag (gtag.js) - Google Analytics