2011-04-04 27 views
0

我在UI线程中发生了很多事情,还有Activity中的其他Runnable线程。在此主要活动中,我使用startActivityForResult()通过按钮按钮启动新的活动。现在,当我开始新的活动时,我得到一个ANR错误,这意味着有些事情比设定的时间长,我弹出ForceClose/Wait对话框。我的应用程序中的ANR问题

事情是,对于新的活动,我只设置了活动的contentView,没有别的东西,所以它意味着前一个活动导致它挂起。它只是在最近才从来没有在这个应用中出现过,我不认为我为它添加了什么。

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

我可能会把第一个活动搁置,而第二个加载(我认为这是否无论如何)?就像我说的第二个Activity除了加载ContentView之外什么也不做。

回答

1

当你开始一个新的活动时,如你所说,以前的活动应该被搁置。但首先调用activity的onPause。也许这是导致ANR的这种方法?特别是如果它正在保存大量的状态数据。

只是猜测在这里。

+0

我打算给你绿色的勾号,你的回答帮助我解决了实际上错误的。在onStop方法中,我有相当多的数据库和SharedPrefs调用,并试图在进入下一个活动之前执行这些调用,我通过将其更改为onDestroy解决了该问题,因为我只想在应用程序完全关闭时保存这些数据。再次感谢。 – SamRowley 2011-04-06 08:59:01

0

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

0

ANR通常在您请求UI(如按下按钮)时发生,所以我认为这不是导致ANR的第二次活动启动,但是您使用UI的事实。

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