请教一个关于弱引用的问题

QlDoors 2014-12-19 03:15:21

public class StudentActivity extends Activity {
private IHandler handler = new IHandler(this);

private static class IHandler extends Handler {
private WeakReference<Activity> mActivity;

public IHandler(Activity activity) {
this.mActivity = new WeakReference<Activity>(activity);
}

@Override
public void handleMessage(Message msg) {
}
}
}


请问这里对Activity的引用要用弱引用,如果用强引用会有什么后果?
...全文
235 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
技术小黑屋 2014-12-28
  • 打赏
  • 举报
回复
1.当一个Android应用启动的时候,会自动创建一个供应用主线程使用的Looper实例。Looper的主要工作就是一个一个处理消息队列中的消息对象。在Android中,所有Android框架的事件(比如Activity的生命周期方法调用和按钮点击等)都是放入到消息中,然后加入到Looper要处理的消息队列中,由Looper负责一条一条地进行处理。主线程中的Looper生命周期和当前应用一样长。 2.当一个Handler在主线程进行了初始化之后,我们发送一个target为这个Handler的消息到Looper处理的消息队列时,实际上已经发送的消息已经包含了一个Handler实例的引用,只有这样Looper在处理到这条消息时才可以调用Handler#handleMessage(Message)完成消息的正确处理。 3.在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用。静态的内部类不会持有外部类的引用。 你可以参考这篇文章http://droidyue.com/blog/2014/12/28/in-android-handler-classes-should-be-static-or-leaks-might-occur/
Birds2018 2014-12-24
  • 打赏
  • 举报
回复
个人觉得没必要用弱引用,这个Handler是个内部类,直接可以引用ApplicationContext上下文
windfury_plus 2014-12-24
  • 打赏
  • 举报
回复
引用 2 楼 QlDoors 的回复:
[quote=引用 1 楼 yanxing2012 的回复:] http://wiseideal.iteye.com/blog/1469295
我不是问弱引用是怎么回事,是问这里为什么要用弱引用[/quote] 系统在内存不足想回收优先级低的activity或在你finish自己的activity时,用了强应用activity那片内存就无法释放了。 导致内存泄漏。
yanxing2012 2014-12-24
  • 打赏
  • 举报
回复
引用 2 楼 QlDoors 的回复:
[quote=引用 1 楼 yanxing2012 的回复:] http://wiseideal.iteye.com/blog/1469295
我不是问弱引用是怎么回事,是问这里为什么要用弱引用[/quote] 不是有警告吗,内存可能泄露,用弱引用就没事了
QlDoors 2014-12-21
  • 打赏
  • 举报
回复
引用 1 楼 yanxing2012 的回复:
http://wiseideal.iteye.com/blog/1469295
我不是问弱引用是怎么回事,是问这里为什么要用弱引用
yanxing2012 2014-12-19
  • 打赏
  • 举报
回复
http://wiseideal.iteye.com/blog/1469295

80,351

社区成员

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

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