1. HandlerThread导致oom
背景:自动化测试过程中,每一个用例task里面会启动一个HandlerThread,但是HandlerThread是在task构造函数里面启动,而不是onStart里面启动,这样就导致初始化task集合时瞬间start了很多HandlerThread,并且如果中间退出测试,会导致没有开始的task里面的HandlerThread无法释放。最终多次进出之后,会导致大量线程存在,进而oom.
public abstract class BasicTask {
protected BasicTask(int repeat) {
handlerThread = new HandlerThread(getClass().getSimpleName()
+ "_Handler");
handlerThread.start();
}
protected void onStart(){
..............
}
//只有被onStart过的task才能onStop
protected void onStop() {
handlerThread.quit();
}
}
解决方案:延迟start HandlerThread
public abstract class BasicTask {
protected BasicTask(int repeat) {
.........................
}
protected void onStart(){
handlerThread = new HandlerThread(getClass().getSimpleName()
+ "_Handler");
handlerThread.start();
}
//只有被onStart过的task才能onStop
protected void onStop() {
handlerThread.quit();
}
}