Android-Android Activity 总是会提示 Handler 一个错误
更新:给负分的留下原因,我也会欣然接受~
普通的 Activity 添加 Handler 成员变量
Handler handler = new Handler()
{
Override
public void handleMessage(Message msg) {
// TODO
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1.当一个Android应用启动的时候,会自动创建一个供应用主线程使用的Looper实例。Looper的主要工作就是一个一个处理消息队列中的消息对象。在Android中,所有Android框架的事件(比如Activity的生命周期方法调用和按钮点击等)都是放入到消息中,然后加入到Looper要处理的消息队列中,由Looper负责一条一条地进行处理。主线程中的Looper生命周期和当前应用一样长。
2.当一个Handler在主线程进行了初始化之后,我们发送一个target为这个Handler的消息到Looper处理的消息队列时,实际上已经发送的消息已经包含了一个Handler实例的引用,只有这样Looper在处理到这条消息时才可以调用Handler#handleMessage(Message)完成消息的正确处理。
3.在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用。静态的内部类不会持有外部类的引用。
具体了解你可以参考一下这篇文章Android中Handler引起的内存泄露
我之前也遇到了这个问题。因为这不是报错,其实只是警告,所以很多人不在乎,所以给你负分估计是这个原因。。看看这里吧:http://www.eoeandroid.com/thread-184245-1-1.html
这个其实是新版Android lint的提示功能,非静态的handler会持有当前Activity的引用,可能造成内存泄漏。
对于我给出的链接说明下:
方法1:这个方法肯定不会用
方法2:适用于当前handler只处理一件事
方法3:这个是通用方法,持有当前Activity的弱引用。
ps:
1.Android lint很好用可以看看这里
2.持有当前**的弱引用可以扩展到很多地方