【问题标题】:ANR problem in my app我的应用程序中的 ANR 问题
【发布时间】:2011-04-04 14:52:36
【问题描述】:

我的 Activity 非常繁重,UI 线程中发生了很多事情,Activity 中还有其他 Runnable 线程。在这个主要活动中,我通过按下按钮启动一个新活动,使用startActivityForResult() 调用该活动。现在,当我开始新活动时,我收到一个 ANR 错误,这意味着有些事情花费的时间超过了设定的时间,并且我会弹出 ForceClose/Wait 对话框。

问题是,对于新的 Activity,我只设置了 Activity 的 contentView,没有其他任何东西,所以这意味着前一个 Activity 中的某些东西导致它挂起。直到最近,它才在应用程序中出现过这种情况,我想不出我为它添加了什么导致这种情况。

在第一个 Activity 中,我有 OpenFeint、SurfaceHolder.Callback、后台线程中的数据库调用和大量图像操作。这些进程中的任何一个是否足够饥饿而导致 ANR?

我是否可以在第二个活动加载时暂停第一个活动(我认为它确实这样做了)?就像我说的那样,第二个 Activity 除了加载 ContentView 什么都不做。

【问题讨论】:

    标签: java android multithreading android-activity


    【解决方案1】:

    如您所说,当您开始一项新活动时,应暂停之前的活动。但首先调用活动的 onPause。也许是这种方法导致了 ANR?尤其是在保存大量状态数据时。

    这里只是猜测。

    【讨论】:

    • 我会给你一个绿色的勾号,你的回答帮助我解决了真正的问题。在 onStop 方法中,我有很多数据库和 SharedPrefs 调用,并试图在移动到下一个活动之前进行这些调用,我通过将其更改为 onDestroy 解决了这个问题,因为我只想在应用程序完全关闭时保存这些数据.再次感谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 1970-01-01
        • 2013-03-24
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 2016-01-28
        相关资源
        最近更新 更多