在Android开发中,使用多线程处理时,如果需要通知界面需要用到Handler机制,如果不注意就会报如下警告信息:
在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);
}
}
}
分享到:
相关推荐
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实现"探讨了如何在Android中创建并更新一个进度条对话框,利用Handler机制来处理主线程与后台线程间的通信。 首先,ProgressDialog是Android提供的一个内置组件,它可以显示为...
"JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,JobHandler是核心组件,它负责执行具体的业务逻辑。下面我们将详细探讨JobHandler调度器的...
这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
demo01: 通过handler.post()的方法可以更新ui demo02: 一秒钟切换一张图片 demo03: 霓虹灯动态效果的显示 demo04: 倒计时,停止倒计时 demo05: 通过handler.sendMessage和handleMessage发送处理消息 demo06: message...
Maven坐标:io.netty:netty-handler:4.1.65.Final; 标签:netty、handler、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中...
赠送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-...
1. **创建Handler类**:自定义一个`Handler`子类,重写`handleMessage(Message msg)`方法,这个方法会在主线程中被调用,用于处理来自其他线程的消息。 2. **初始化Handler**:在Activity或Service的`onCreate()`...
private static class FragmentHandler extends Handler { private WeakReference<MyFragment> fragmentWeakReference; FragmentHandler(MyFragment fragment) { this.fragmentWeakReference = new ...
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 ...
Maven坐标:io.netty:netty-handler:4.1.73.Final; 标签:handler、netty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
Maven坐标:io.netty:netty-handler:4.1.68.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
Class::ErrorHandler - 错误处理的基类 概要 package Foo; use base qw( Class::ErrorHandler ); sub class_method { my $class = shift; ... return $class->error("Help!") unless $continue; } sub object_...
Maven坐标:io.netty:netty-handler:4.1.24.Final; 标签:handler、netty、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
private static class MyHandler extends Handler { WeakReference<MainActivity> weakRef; MyHandler(MainActivity activity) { weakRef = new WeakReference(activity); } @Override public void ...
Maven坐标:io.netty:netty-handler:4.1.65.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
Maven坐标:io.netty:netty-handler:4.1.74.Final; 标签:netty、handler、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是主线程(UI线程)与工作线程之间的交互。本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理...
赠送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-...
当我们调用 ChannelHandlerContext 的 `fireChannelRead()` 方法时,数据将被传递到下一个 Handler。这个过程会一直持续,直到数据到达 Pipeline 的末尾或者遇到一个处理数据的 Handler。 了解 Handler 的执行顺序...