handler 如何用?弱引用还是用Handler.Callback()

ewwerpm 2017-11-18 05:21:05
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {

};
};

提示警告:
This Handler class should bestatic or leaks might occur (com.tcl.simpletv.myapps.StartActivity.MainHandler)
网上有以下两种解决方案,哪个最好?
1、http://blog.sina.com.cn/s/blog_6e334dc70101gbu2.html
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
return false; // 这里为什么返回false? 返回true好,还是false好?
}
});


2、http://blog.csdn.net/u013209460/article/details/46326289
private HandlermMainHandler;
mMainHandler= new MainHandler(this);
static class MainHandler extends Handler {
WeakReference<StartActivity>mActivity;
publicMainHandler(StartActivity activity) {
mActivity = newWeakReference<StartActivity>(activity);
//TODO Auto-generated constructor stub
}
@Override
public voidhandleMessage(Message msg) {
StartActivitytheActivity = mActivity.get();
switch(msg.what) {
caseGET_APP_LIST:
theActivity.getInstalledAppsData();
break;
default:
break;
}
}
}
...全文
439 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
江三木洛 2017-11-20
  • 打赏
  • 举报
回复
警告说这种方式可能会引起内存泄露 第一种方式不能避免内存泄露吧,应该只是能防止IDE提示错误信息,因为IDE可能仅仅只是针对特定的情况才会提示,即只是在Handler使用无参的情况下会提示 第二种方式因为Handler是静态的类,所以并不会隐式的持有Activity对象,而StartActivity是被弱引用的,所以可以在需要的时候回收,真正的避免了内存泄露
zhongyuanceshi 2017-11-19
  • 打赏
  • 举报
回复
第一种不了解,第二种应该就是把handler生命周期延长。也可以把它放在Application类中统一处理

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧