王学岗CSDN ANR异常的监测

https://github.com/SalomonBrys/ANR-WatchDog 我们使用的是ANR-WatchDog,这是github的地址
首先引入该依赖

dependencies {
  implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'
}

其次,创建MyApplication类,调用ANRWatchDog类的start()方法

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        new ANRWatchDog().start();
    }
}

简单吧,这样就可以检测ANR异常了。
我们测试下

package com.example.test_0725;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

看下日志打印输出

Process: com.example.test_0725, PID: 23761
    com.github.anrwatchdog.ANRError: Application Not Responding
    Caused by: com.github.anrwatchdog.ANRError$$$_Thread: main (state = TIMED_WAITING)
        at java.lang.Thread.sleep(Native Method)
        at java.lang.Thread.sleep(Thread.java:1031)
        at java.lang.Thread.sleep(Thread.java:985)
        at 

com.example.test_0725.MainActivity.onCreate(MainActivity.java:13)
-----------------------------------------------------------------

        at android.app.Activity.performCreate(Activity.java:6303)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2410)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2521)
        at android.app.ActivityThread.access$1000(ActivityThread.java:153)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:5600)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:752)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:642)
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: FileObserver (state = RUNNABLE)
        at android.os.FileObserver$ObserverThread.observe(Native Method)
        at android.os.FileObserver$ObserverThread.run(FileObserver.java:85)
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: FinalizerDaemon (state = WAITING)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:423)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:101)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:72)
        at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:217)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: FinalizerWatchdogDaemon (state = WAITING)
        at java.lang.Object.wait(Native Method)
        at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:279)
        at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:259)
        at java.lang.Thread.run(Thread.java:818) 
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: HeapTaskDaemon (state = BLOCKED)
        at dalvik.system.VMRuntime.runHeapTasks(Native Method)
        at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:443)
        at java.lang.Thread.run(Thread.java:818) 
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: ReferenceQueueDaemon (state = WAITING)
        at java.lang.Object.wait(Native Method)
        at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:152)
        at java.lang.Thread.run(Thread.java:818) 
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: Thread-5089 (state = RUNNABLE)
        at android.net.LocalSocketImpl.accept(Native Method)
        at android.net.LocalSocketImpl.accept(LocalSocketImpl.java:331)
        at android.net.LocalServerSocket.accept(LocalServerSocket.java:90)
        at com.android.tools.ir.server.Server$SocketServerThread.run(Server.java:165)
        at java.lang.Thread.run(Thread.java:818) 
     Caused by: com.github.anrwatchdog.ANRError$$$_Thread: |ANR-WatchDog| (state = RUNNABLE)
        at dalvik.system.VMStack.getThreadStackTrace(Native Method)
        at java.lang.Thread.getStackTrace(Thread.java:580)
        at java.lang.Thread.getAllStackTraces(Thread.java:522)
        at com.github.anrwatchdog.ANRError.New(ANRError.java:72)
        at com.github.anrwatchdog.ANRWatchDog.run(ANRWatchDog.java:209)

上面代码虚线就是报ANR异常的地方。

猜你喜欢

转载自blog.csdn.net/qczg_wxg/article/details/81206553