Android如何检查线程有耗时任务

framework:

WatchDog

  • 1.检查是否发生了死锁
  • 2.线程是否被任务block


    Android如何检查线程有耗时任务_第1张图片
    image.png

以AMS 为例查看源码:startOtherServices
检测线程死锁有个很好的方法:
就是一直去尝试获取当前线程的锁,如果一直拿不到那就有可能死锁了

BlockCanary

其实是利用looper机制,如下:

public static void loop() {
 final MessageQueue queue = me.mQueue;
    for (;;) {
     //这里可以手动的设置一个mLogging
     final Printer logging = me.mLogging;
       if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
        }
        //分发消息
         msg.target.dispatchMessage(msg);
        if (logging != null) {
                logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
        }
      }
  }

其实就是手动给设置一个mLogging,然后去分别去计算
Dispatching 到 Finished 的时间 ,来判断当前handler线程执行的时间。
可以通过如下 方式,就可以更加优雅得计算当前系统任务的耗时时间了。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getMainLooper().setMessageLogging(new Printer() {
        @Override
        public void println(String x) {
       //">>>>> Dispatching to " + msg.target + " " +msg.callback + ": " + msg.what
       //可以去计算当前花费的时间 来判断一个任务(handleMessage(Message msg))是的执行时间
       // "<<<<< Finished to " + msg.target + " " + msg.callback
        }
  });
}

你可能感兴趣的:(Android如何检查线程有耗时任务)