我的应用程序中的ANR问题

时间:2011-04-04 14:52:36

标签: java android multithreading android-activity

我有一个非常繁重的Activity,UI线程中有很多东西,还有Activity中的其他Runnable线程。在这个主要活动中,我按下按钮开始一个新的活动,使用startActivityForResult()调用。现在,当我开始新的活动时,我得到一个ANR错误,意味着有一些时间超过设定的时间,我会弹出ForceClose / Wait Dialog。

问题是,对于新的Activity,我只为活动设置了contentView而没有其他内容,因此它意味着来自上一个Activity的内容导致它挂起。它之前从未在应用程序中出现过这种情况,我无法想到我为它添加了什么来引起这种情况。

在第一个Activity中我有OpenFeint,SurfaceHolder.Callback,数据库调用后台线程和很多图像操作。这些过程中的任何一个都是否足以引起ANR?

我可以把第一个活动暂停,而第二个活动加载(我还以为它确实这样做了)?就像我说的那样,第二个Activity除了加载ContentView之外什么都不做。

3 个答案:

答案 0 :(得分:1)

当您开始新活动时,应该暂停之前的活动,如您所说。但首先调用活动的onPause。也许是这种导致ANR的方法?特别是如果它节省了大量的状态数据。

在这里猜测。

答案 1 :(得分:0)

有一个ANR的事实很明显,UI线程中的某些东西运行时间更长(正如你所指出的那样)。而且,你似乎做了很多事情(至少解释给出了这种感觉)。在这一点上,我可以说尝试评论某些部分,看看问题是否仍然存在。例如。注释startActivityForResult(),这应该告诉你哪个活动是罪魁祸首。此外,如果您可以提供一些伪代码,我相信人们会有更好的想法,并且能够提供更好的帮助。

答案 2 :(得分:0)

ANR通常在你征求用户界面时出现(比如按下按钮),所以我认为这不是导致ANR的第二次活动启动,而是你使用UI的事实。

所以问题来自你的第一个活动,而不是第二个活动。