android ANR(活动无响应)trace.txt
我在我的应用程序中有一个偶发且很难重现的ANR事件。今天事情发生了,我从设备中取出了位于/data/anr中的trace.txt文件。 不幸的是,我不能理解这个文件中的数据,这里是完整的文件内容。 有人能理解是什么让我的应用程序的UI没有响应吗? 我已经读过类似的问题,但仍然看不懂文件 我已将完整的trace.txt文件内容粘贴到 编辑 pastebin上的文件不再可用,我也无法访问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操作。
谢谢最有可能的原因是编译器正在等待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时哪个线程正在执行。或者,检查你在主线程中所做的花费了很长时间的事情,并将其卸载到线程中。你能更好地解释一下吗?“等待互联网操作”是什么意思?