android ANR(活动没有响应)trace.txt

时间:2013-10-16 10:23:11

标签: android trace android-anr-dialog

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

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

修改

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

谢谢

4 个答案:

答案 0 :(得分:4)

您可以使用Strictmode找出延迟特定线程的调用。使用它的最佳方式是以下形式。在您的应用程序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();
 }

答案 1 :(得分:3)

@Mohamed_AbdAllah写了他的评论“trace.txt是ANR发生时所有正在运行的线程的情况。”在ANR发生时从线程中找到ANR的原因似乎不可能像你发布的那样跟踪。如果您想了解跟踪中的文本含义,您可能会对this感兴趣。 (当从跟踪中发现ANR时,您可以获得长时间运行的线程,但这可能对您没有帮助)

或者,如果你想看看你的andoid应用程序有什么类型的崩溃/ ANR(我假设你对在Google Play上开发和发布的应用程序感兴趣),你可以使用崩溃报告api。我为此目的使用crashlytics,它确实帮助我修复了我的应用程序崩溃。将此api添加到应用程序时,您可以跟踪网页上的所有崩溃/ ANR。

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

编辑:我假设您正在谈论您在Google Play上开发并发布的应用程序。如果您正在谈论尚未发布到谷歌播放的应用程序,@ Jeffrey Klardie的建议正是您所需要的。但建议不要在google play上启用Strictmode应用程序。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果没有代码来查看正在发生的事情,很难帮助解决这个问题,所以我会列出在我遇到这种情况时我会对自己的代码做些什么。

  1. 在我的代码上运行静态分析工具以识别一些奇怪的行为(无限循环,丢失的情况等)。我个人使用FindBugs
    1. 查看从静态分析工具弹出的错误,更正那些对您正在做的事情有意义的错误。
  2. 查看代码中是否存在任何“邪恶”代码,例如真正的长循环,可以异步的同步活动,sleep()函数的使用,同步处理的异步活动等等。
  3. 如果以上所有内容都没有产生影响,请开始在所有地方投入Log语句。观察运行中的输出,看看它到达的位置或重复的位置。
  4. 如果上述情况都不奏效,请打开啤酒做一点瑜伽然后重新开始觅食并挖掘更多!