【发布时间】:2015-02-06 13:38:16
【问题描述】:
我正在开发一个非常大的应用程序。有时当我在 2.3 设备上启动它时,UI 线程会莫名其妙地卡住。我不认为这是我自己的任务之一,但我无法弄清楚它是什么。有什么方法可以让我弄清楚 UI 线程中当前正在运行的确切任务是什么?
更多信息:
我在Handler 上运行Runnable,在某些时候使用主要的Looper,但run() 在这些情况下永远不会被执行。当我触摸屏幕时,我也会收到 ANR。我认为它必须以某种方式与内存相关,因为当我删除其中一个背景图像时,感觉它卡住的更少。不过,我没有收到 OOM 异常。
编辑
我为主要Looper 启用了日志记录。最后一个被分派的任务是what=1004。这绝对不是我写的。
Looper: >>>>> Dispatching to Handler{406cbec0} null: 1004
【问题讨论】:
-
您是从辅助线程更新 UI 吗?
-
我不知道。我启用了严格模式,我想这会通知我。
-
嗯,在我看来,你要么在主线程上做一些繁重的工作,要么在一些网络/数据库调用上做一些事情,或者你正在从辅助线程更新 UI,但在大多数情况下应用程序会崩溃。如果您需要更多帮助,请在此处发布您的活动代码 :)
-
如果这只发生在一个屏幕上,请发布活动/片段代码。这将有助于回答您的问题。
-
正如我所说,该应用程序非常大,我不知道要发布代码的哪些部分。虽然 UI 线程没有繁重的工作。我怀疑一些内部的 Android UI 构建方法左右。