Android-Android Activity 总是会提示 Handler 一个错误

发布于 2016-10-13 11:47:10 字数 259 浏览 1164 评论 2

更新:给负分的留下原因,我也会欣然接受~

普通的 Activity 添加 Handler 成员变量

Handler handler = new Handler()
{
Override
public void handleMessage(Message msg) {
// TODO
}
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-08-12 06:02:45

1.当一个Android应用启动的时候,会自动创建一个供应用主线程使用的Looper实例。Looper的主要工作就是一个一个处理消息队列中的消息对象。在Android中,所有Android框架的事件(比如Activity的生命周期方法调用和按钮点击等)都是放入到消息中,然后加入到Looper要处理的消息队列中,由Looper负责一条一条地进行处理。主线程中的Looper生命周期和当前应用一样长。

2.当一个Handler在主线程进行了初始化之后,我们发送一个target为这个Handler的消息到Looper处理的消息队列时,实际上已经发送的消息已经包含了一个Handler实例的引用,只有这样Looper在处理到这条消息时才可以调用Handler#handleMessage(Message)完成消息的正确处理。

3.在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用。静态的内部类不会持有外部类的引用。

具体了解你可以参考一下这篇文章Android中Handler引起的内存泄露

瑾兮 2017-02-01 12:18:32

我之前也遇到了这个问题。因为这不是报错,其实只是警告,所以很多人不在乎,所以给你负分估计是这个原因。。看看这里吧:http://www.eoeandroid.com/thread-184245-1-1.html
这个其实是新版Android lint的提示功能,非静态的handler会持有当前Activity的引用,可能造成内存泄漏。
对于我给出的链接说明下:
方法1:这个方法肯定不会用
方法2:适用于当前handler只处理一件事
方法3:这个是通用方法,持有当前Activity的弱引用。

ps:
1.Android lint很好用可以看看这里
2.持有当前**的弱引用可以扩展到很多地方

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文