http://www.jianshu.com/p/87f2ba180066 带你学开源项目:LeakCanary-如何检测 Activity 是否泄漏
(1)为了简单方便的检测内存泄漏,Square 开源了 LeakCanary,
它可以实时监测 Activity 是否发生了泄漏,
一旦发现就会自动弹出提示及相关的泄漏信息供分析。
被强引用的对象就算发生 OOM 也永远不会被垃圾回收机回收;被弱引用的对象,只要被垃圾回收器发现就会立即被回收;被软引用的对象,具备内存敏感性,
只有内存不足时才会被回收,常用来做内存敏感缓存器;虚引用则任意时刻都可能被回收,使用较少。
(3)如何创建一个优先级低的主线程任务,它只会在主线程空闲时才执行,不会影响到app的性能?
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override public boolean queueIdle() {
// do task
return false; // only once
}
});
(4)如何快速创建一个主/子线程handler?
//主线程handler
mainHandler = new Handler(Looper.getMainLooper());
//子线程handler
HandlerThread handlerThread = new HandlerThread(“子线程任务”);
handlerThread.start();
Handler backgroundHandler = new Handler(handlerThread.getLooper());
(5)如何快速判断当前是否运行在主线程?
Looper.getMainLooper().getThread() == Thread.currentThread();
(1)为了简单方便的检测内存泄漏,Square 开源了 LeakCanary,
它可以实时监测 Activity 是否发生了泄漏,
一旦发现就会自动弹出提示及相关的泄漏信息供分析。
被强引用的对象就算发生 OOM 也永远不会被垃圾回收机回收;被弱引用的对象,只要被垃圾回收器发现就会立即被回收;被软引用的对象,具备内存敏感性,
只有内存不足时才会被回收,常用来做内存敏感缓存器;虚引用则任意时刻都可能被回收,使用较少。
(3)如何创建一个优先级低的主线程任务,它只会在主线程空闲时才执行,不会影响到app的性能?
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override public boolean queueIdle() {
// do task
return false; // only once
}
});
(4)如何快速创建一个主/子线程handler?
//主线程handler
mainHandler = new Handler(Looper.getMainLooper());
//子线程handler
HandlerThread handlerThread = new HandlerThread(“子线程任务”);
handlerThread.start();
Handler backgroundHandler = new Handler(handlerThread.getLooper());
(5)如何快速判断当前是否运行在主线程?
Looper.getMainLooper().getThread() == Thread.currentThread();