有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我的应用程序中的java ANR问题

我有一个相当繁重的活动,UI线程中有很多事情在进行,活动中还有其他可运行的线程。在这个主要活动中,我通过按下按钮来启动一个新的活动,这个按钮是使用startActivityForResult()调用的。现在,当我开始新的活动时,我得到了一个ANR错误,这意味着有些事情需要的时间超过了设置的时间,我会弹出ForceClose/Wait对话框

问题是,对于新活动,我只为该活动设置contentView,没有其他设置,因此这意味着前一个活动中的某些内容导致它挂起。它以前从未在应用程序中关闭过这个,只是最近才关闭,我想不出我添加了什么导致了这个

在第一个活动中,我有OpenFeint,SurfaceHolder。回调、后台线程中的数据库调用以及大量的图像处理。这些过程中是否有一个饥饿到足以导致ANR

当第二个活动加载时,我是否可以暂停第一个活动(我想它还是这样做的)?就像我说的,第二个活动除了加载ContentView之外什么都不做


共 (3) 个答案

  1. # 1 楼答案

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

    所以问题在于你的第一次活动,而不是第二次

  2. # 2 楼答案

    当你开始一项新的活动时,如你所说,前一项活动应该暂停。但首先,活动的onPause被称为。也许是这种方法导致了ANR?尤其是如果它正在保存大量的状态数据

    只是猜猜而已

  3. # 3 楼答案

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