美文网首页
HandlerThread

HandlerThread

作者: Wenchl | 来源:发表于2017-02-24 14:09 被阅读22次

在程序的开发过程中,为了使程序变的流畅起来,我们一般会把耗时的任务放在线程中,避免造成主ui卡顿。

项目开发中遇到一个oom异常,定位到是数据上报的地方,经查看代码发现,我们的数据上报是在service中进行的,service里面对每次的数据上报都new了一个thread来进行处理,因为一个点击跳转操作可能会有多个数据上报,所以当你每次的数据上报都new一个thread的时候会造成内存浪费(new一个空的线程会有大约15k---40k的开销)、页面卡顿等影响应用性能的问题。所以,要优化地方就是把线程合并起来,只用一个线程来跑数据上报就可以了,这时候HandlerThread就是最佳的选择,它是未某些任务创建一个专属的线程,当你不使用的时候线程也是一直存在的,结合项目,数据上报基本全app都会有,所以使用HandlerThread来对数据上报处理,再合适不过了。

在使用HandlerThread的时候注意一个问题,它默认的线程优先级是THREAD_PRIORITY_DEFAULT也就是0,一般如果后台线程THREAD_PRIORITY_BACKGROUND的优先级是10,所以,要根据自身的业务情况设置相应的线程优先级Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);


private void initBackThread(){

        mHandlerThread = new HandlerThread("StatisticsService");

        mHandlerThread.start();

        mServiceHandler = new ServiceHandler(mHandlerThread.getLooper());

}

private final class ServiceHandler extends Handler {

public ServiceHandler (Looper looper) {

        super(looper);

}

      @Override

      public void handleMessage (Message msg) {
      //设置优先级,处理你需要的耗时操作
          android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

        }

}

相关文章

网友评论

      本文标题:HandlerThread

      本文链接:https://www.haomeiwen.com/subject/shrwwttx.html