ANR-WatchDog原理
ANR-WatchDog 单独起一个子线程向主线程发送一个重置变量操作的Runnable,然后休眠一段时间(自定义的ANR超时时间),如果休眠后该变量的值没有被重置,则表明有ANR发生,此时可以重启APP(针对某家客户的特定需求)。
客户端实现
1.在app级的build.gradle
里添加ANR-WatchDog库的依赖:
implementation 'com.github.anrwatchdog:anrwatchdog:1.4.0'
2.在Application的onCreate
方法里初始化:
new ANRWatchDog()
.setANRListener(new ANRWatchDog.ANRListener() {
@Override
public void onAppNotResponding(ANRError error) {
restartApp();
}
})
.start();
其中restartApp方法为:
private void restartApp() {
Intent intent = getPackageManager()
.getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}