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

问题描述 投票:2回答:4

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

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

编辑

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

谢谢

android trace android-anr-dialog
4个回答
4
投票

您可以使用Strictmode找出延迟特定线程的调用。使用它的最佳方式是以下形式。在您的应用程序onCreate()中启用StrictMode。在此之后,(几乎)该线程上的所有慢速调用都将报告给您的日志,并显示它发生的完整堆栈跟踪。

在您的自定义Application类中:

 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();
 }

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应用程序。


0
投票

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

  1. 在我的代码上运行静态分析工具以识别一些奇怪的行为(无限循环,缺少案例等)。我个人使用FindBugs。 查看从静态分析工具弹出的错误,更正对您正在执行的操作有意义的错误。
  2. 查看代码中是否存在任何“邪恶”代码,例如真正的长循环,可以异步的同步活动,使用sleep()函数,同步处理的异步活动等。
  3. 如果上述任何一个都没有产生影响,开始在整个地方投掷Log声明。观察运行中的输出,看看它到达的位置或重复的内容。
  4. 如果以上都不起作用,请打开啤酒做一点瑜伽,然后再回到四处寻找并挖掘更多!

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.