在检测我的应用程序后生成用于分析的跟踪日志时如何禁用 ANR 看门狗?

Posted

技术标签:

【中文标题】在检测我的应用程序后生成用于分析的跟踪日志时如何禁用 ANR 看门狗?【英文标题】:How to disable ANR Watchdog when generating Trace Logs for Profiling after instrumenting my App? 【发布时间】:2019-02-13 10:25:41 【问题描述】:

目前正在尝试获取大型 android 应用程序的配置文件跟踪日志文件,我们在 MyApplication 类上进行了检测,遵循 documentation about instrumenting my app to get trace logs。

我们正试图深入研究当我们的应用程序被初始化并且 Dagger2 在应用程序启动时创建对象图时会发生什么。

冷启动通常需要几秒钟,我遇到的问题是,当我添加调试跟踪时,它会显着减慢应用程序的初始化速度,使其崩溃并显示 ANR 消息。

    com.github.anrwatchdog.ANRError: Application Not Responding
    Caused by: com.github.anrwatchdog.ANRError$$$_Thread: main (state = RUNNABLE)

我想知道是否有办法防止 Android 操作系统在我的应用程序长时间阻塞时崩溃,或者至少提高 ANR 阈值。

欢迎任何帮助或提示。谢谢!

对于进一步的上下文,这大致就是我在 MyApplication.class 中所做的:

public void onCreate() 
   super.onCreate();

   Debug.startMethodTracing("MyApp_onCreate()");

   injectSelf();
   AppInit.initApp(this);

   Debug.stopMethodTracing();


【问题讨论】:

【参考方案1】:

实际上,我们有自己的ANRWatchDogManager,我不知道,我可以在哪里扩大限制。

public class ANRWatchDogManager implements ANRWatchDog.ANRListener 

在那个班级的某个地方:

    public void startANRWatchDog() 
        final int timeoutInterval = isDebugBuild() && isEmulator()
                ? ANR_INCREASED_TIMEOUT
                : ANR_DEFAULT_TIMEOUT;
        new ANRWatchDog(timeoutInterval).setANRListener(this).start();
    

【讨论】:

以上是关于在检测我的应用程序后生成用于分析的跟踪日志时如何禁用 ANR 看门狗?的主要内容,如果未能解决你的问题,请参考以下文章

如何分析IIS7的失败请求跟踪日志

OSX 10.10,如何在睡眠和恐慌后生成核心转储文件?

Debugging memory usage with kbmMW

安装 firebase 后生成推送通知

如何解决在等级失败错误中添加 pro-guard 后生成 apk 的问题?

将OneSignal插件添加到Ionic App后生成APK时出错