Handler最正确的写法(避免内存泄露)
来源:互联网 发布:mysql 删除重复值 编辑:程序博客网 时间:2024/06/08 12:01
/** Handler最正确的写法: handler重点在 原理 和 内存泄露
*
*
* Handler的内存泄露问题:
* 目的:当一个handler延时10分钟执行完毕,但是没执行完毕当前的Activity被finish(),handler执行时需要当前的界面,界面执行了finish但是后台依然在
* 运行,实际没有关闭,这会导致内存泄露。
*
* 6.handler的内存泄露问题:
1.定义一个内部类时,会默认拥有外部类对象引用,所以建议使用内部类 时,最好定义为一个静态内部类
2.引用的强弱: 强引用--软引用--弱引用
普通new叫强引用,内存不足不会自动回收,销毁或制空才会被回收
软引用:一个对象引用到另一个对象(如果内存不足会回收这个对象)
弱引用: 如果不存在 访问不到
*
*/
public class HandlerMemoryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("Runnable");
}
}, 1000*10*60);// 十分钟后执行
// 关闭当前Activity
finish();
}
/**
* 内部类 handler正宗写法
* @author itotem
*
*/
private MyHandler handler = new MyHandler(this);
class MyHandler extends Handler{
// 弱引用 ,防止内存泄露
private WeakReference<HandlerMemoryActivity> weakReference;
public MyHandler(HandlerMemoryActivity handlerMemoryActivity){
weakReference = new WeakReference<HandlerMemoryActivity>(handlerMemoryActivity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 通过 软引用 看能否得到activity示例
HandlerMemoryActivity handlerMemoryActivity = weakReference.get();
// 防止内存泄露
if (handlerMemoryActivity != null) {
// 如果当前Activity,进行UI的更新
}else {
// 没有实例不进行操作
}
}
}
}
1 0
- Handler最正确的写法(避免内存泄露)
- Handler引起的内存泄露(Activity中Handler的正确使用方法)
- Handler的正确写法
- Handler各种使用情况的内存泄露分析和避免
- 如何避免由于使用Handler导致的内存泄露
- Handler防止内存泄露优雅的一种写法
- 代码规范写法,避免内存泄露
- Android -> 如何避免Handler引起内存泄露
- Android -> 如何避免Handler引起内存泄露
- 如何避免Handler引起内存泄露
- Android -> 如何避免Handler引起内存泄露
- 如何避免Handler引起内存泄露
- Android 如何避免Handler引起内存泄露
- (四)避免对象的内存泄露
- 避免内存泄露的方法
- 避免内存泄露的方法
- 避免内存泄露的方法
- 避免内存泄露的方法
- HI3515海思开发板移植3G模块笔记
- (1.4.5.1)Java编程题——在一个字符串中查找第一个非重复的字符
- ArrayAdapter requires the resource ID to be a TextView问题
- Eclipse修改workspace
- Mining Massive Datasets课程笔记(一)
- Handler最正确的写法(避免内存泄露)
- GOF23设计模式之 工厂模式
- 对Throwable的处理
- gcc原子化操作
- (1.1.7.1)上台阶、硬币问题的算法
- 219 An problem about date【日期的定理】
- windows7 64位编译hadoop2.7.1
- 使用java的DBUtils
- I/O流与异常