android性能问题---项目实战

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();
    }
}

     

     

你可能感兴趣的:(android基础)