Android Handler的详解及实例
Android Handler的详解
Handler我们常常用于通知主线程做相对应的操作,但是如果使用不但的话就会造成内存泄露,所以记录写正确的Handler写法。
Handler handler = new Handler() {
public void handleMessage(Message msg) {
//do something
};
};
handler.sendEmptyMessageDelayed(0, 100 * 1000);
像上面的代码片段,就会存在内存泄露的风险,因为handler占着Acitvity的引用阻止了系统进行GC回收操作。
private static class MyHandler extends Handler {
WeakReference<MainActivity> mWeakReferenceActivity;
public MyHandler(MainActivity activity) {
mWeakReferenceActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (null != mWeakReferenceActivity) {
MainActivity _activity = mWeakReferenceActivity.get();
//_activity.dosomething();
}
}
}
正确的做法是WeakReference存放存入的Activity,这样在Activity结束回收的时候WeakReference不会阻止系统进行回收操作,能有效的避免因为handler引起的内存泄露风险。
当然你使用handler那种写法也不是不行的,需要你在结束Activity的时候handler.removeCallbacksAndMessages(null);让系统能够正常进行回收操作。
以上就是关于Android Handle 用法的详解,关于Android 线程的文章,本站还有好多,大家可以参阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
Android 自定义加载动画Dialog弹窗效果的示例代码
这篇文章主要介绍了Android 自定义加载动画Dialog弹窗效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-06-06
Flutter 文字中划线动画StrikeThroughTextAnimation
这篇文章主要为大家介绍了Flutter 文字中划线动画StrikeThroughTextAnimation示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04


最新评论