我有一个非常繁重的Activity,UI线程中有很多东西,还有Activity中的其他Runnable线程。在这个主要活动中,我按下按钮开始一个新的活动,使用startActivityForResult()
调用。现在,当我开始新的活动时,我得到一个ANR错误,意味着有一些时间超过设定的时间,我会弹出ForceClose / Wait Dialog。
问题是,对于新的Activity,我只为活动设置了contentView而没有其他内容,因此它意味着来自上一个Activity的内容导致它挂起。它之前从未在应用程序中出现过这种情况,我无法想到我为它添加了什么来引起这种情况。
在第一个Activity中我有OpenFeint,SurfaceHolder.Callback,数据库调用后台线程和很多图像操作。这些过程中的任何一个都是否足以引起ANR?
我可以把第一个活动暂停,而第二个活动加载(我还以为它确实这样做了)?就像我说的那样,第二个Activity除了加载ContentView之外什么都不做。
答案 0 :(得分:1)
当您开始新活动时,应该暂停之前的活动,如您所说。但首先调用活动的onPause。也许是这种导致ANR的方法?特别是如果它节省了大量的状态数据。
在这里猜测。
答案 1 :(得分:0)
有一个ANR的事实很明显,UI线程中的某些东西运行时间更长(正如你所指出的那样)。而且,你似乎做了很多事情(至少解释给出了这种感觉)。在这一点上,我可以说尝试评论某些部分,看看问题是否仍然存在。例如。注释startActivityForResult(),这应该告诉你哪个活动是罪魁祸首。此外,如果您可以提供一些伪代码,我相信人们会有更好的想法,并且能够提供更好的帮助。
答案 2 :(得分:0)
ANR通常在你征求用户界面时出现(比如按下按钮),所以我认为这不是导致ANR的第二次活动启动,而是你使用UI的事实。
所以问题来自你的第一个活动,而不是第二个活动。