android ANR(活动无响应)trace.txt

android ANR(活动无响应)trace.txt,android,trace,android-anr-dialog,Android,Trace,Android Anr Dialog,我在我的应用程序中有一个偶发且很难重现的ANR事件。今天事情发生了,我从设备中取出了位于/data/anr中的trace.txt文件。 不幸的是,我不能理解这个文件中的数据,这里是完整的文件内容。 有人能理解是什么让我的应用程序的UI没有响应吗? 我已经读过类似的问题,但仍然看不懂文件 我已将完整的trace.txt文件内容粘贴到 编辑 pastebin上的文件不再可用,我也无法访问trace.txt文件,因此可以关闭答案 谢谢最有可能的原因是编译器正在等待UI线程上的某些interweb操作。

我在我的应用程序中有一个偶发且很难重现的ANR事件。今天事情发生了,我从设备中取出了位于/data/anr中的trace.txt文件。 不幸的是,我不能理解这个文件中的数据,这里是完整的文件内容。 有人能理解是什么让我的应用程序的UI没有响应吗? 我已经读过类似的问题,但仍然看不懂文件

我已将完整的trace.txt文件内容粘贴到

编辑

pastebin上的文件不再可用,我也无法访问trace.txt文件,因此可以关闭答案


谢谢

最有可能的原因是编译器正在等待UI线程上的某些interweb操作。

如果没有代码来查看发生了什么情况,在这方面很难提供帮助,因此我将列出在这种情况下我将如何处理自己的代码

  • 在我的代码上运行一个静态分析工具来识别一些奇怪的行为(无限循环、缺失案例等)。就我个人而言,我使用。
  • 查看从静态分析工具弹出的错误,纠正那些对您正在做的事情有意义的错误
  • 查看代码中是否出现任何“邪恶”代码,例如非常长的循环、可以是异步的同步活动、使用
    sleep()
    函数、同步处理的异步活动等
  • 如果上述任何一项都没有产生影响,就开始到处抛出
    Log
    语句。观察运行的输出,并查看其到达何处或重复的内容
  • 如果以上这些都不起作用,打开一瓶啤酒,做一点瑜伽,然后继续四处游荡,再挖一些
    正如@Mohamed_AbdAllah在他的评论中所写的那样,“trace.txt是ANR发生时所有正在运行的线程的情况。”在ANR发生时从线程中查找ANR的原因似乎是不可能的,就像您发布的跟踪一样。如果您想了解trace中这些文本的含义,您可能会感兴趣。(您可以从跟踪中获取发生ANR时长时间运行的线程,但这可能对您没有帮助)

    或者,如果您想了解您的andoid应用程序有哪些类型的崩溃/ANR(我假设您对在google play上开发和发布的应用程序感兴趣),您可以使用崩溃报告api。我使用它是为了这个目的,它真的帮助我修复我的应用程序崩溃。将此api添加到应用程序时,可以跟踪网页上的所有崩溃/ANR

    如果您的目的是了解如何从trace.txt找到ANRs的原因,那么我不知道。但是,如果您需要查找并修复崩溃/ANR,那么请使用崩溃报告api

    编辑:我想你说的是一个你已经开发并发布在google play上的应用程序。如果你说的是一个尚未发布到google play的应用程序,@Jeffrey Klardie的建议正是你需要的。但是不建议在google play的应用程序上启用。

    您可以使用它来找出什么调用延迟特定线程。使用它的最佳方式如下表所示。在应用程序onCreate()中,启用StrictMode。在此之后,(几乎)该线程上的所有慢速调用都将报告到日志中,并提供发生位置的完整堆栈跟踪

    在自定义应用程序类中:

     public void onCreate() {
         if (DEVELOPER_MODE) {
             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                     .detectAll()    // detect everything potentially suspect
                     .penaltyLog()   // penalty is to write to log
                     .build());
             StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                     .detectAll()
                     .penaltyLog()
                     .build());
         }
         super.onCreate();
     }
    

    trace.txt是发生ANR时所有正在运行的线程的情况。在主线程中执行长时间活动时会发生ANR。在文本文件中搜索线程,查看发生ANR时哪个线程正在执行。或者,检查你在主线程中所做的花费了很长时间的事情,并将其卸载到线程中。你能更好地解释一下吗?“等待互联网操作”是什么意思?