UI 线程卡在 2.3 设备上
Posted
技术标签:
【中文标题】UI 线程卡在 2.3 设备上【英文标题】:UI thread is getting stuck on 2.3 devices 【发布时间】:2015-02-06 13:38:16 【问题描述】:我正在开发一个非常大的应用程序。有时当我在 2.3 设备上启动它时,UI 线程会莫名其妙地卡住。我不认为这是我自己的任务之一,但我无法弄清楚它是什么。有什么方法可以让我弄清楚 UI 线程中当前正在运行的确切任务是什么?
更多信息:
我在Handler
上运行Runnable
,在某些时候使用主要的Looper
,但run()
在这些情况下永远不会被执行。当我触摸屏幕时,我也会收到 ANR。我认为它必须以某种方式与内存相关,因为当我删除其中一个背景图像时,感觉它卡住的更少。不过,我没有收到 OOM 异常。
编辑
我为主要Looper
启用了日志记录。最后一个被分派的任务是what=1004
。这绝对不是我写的。
Looper: >>>>> Dispatching to Handler406cbec0 null: 1004
【问题讨论】:
您是从辅助线程更新 UI 吗? 我不知道。我启用了严格模式,我想这会通知我。 嗯,在我看来,你要么在主线程上做一些繁重的工作,要么在一些网络/数据库调用上做一些事情,或者你正在从辅助线程更新 UI,但在大多数情况下应用程序会崩溃。如果您需要更多帮助,请在此处发布您的活动代码 :) 如果这只发生在一个屏幕上,请发布活动/片段代码。这将有助于回答您的问题。 正如我所说,该应用程序非常大,我不知道要发布代码的哪些部分。虽然 UI 线程没有繁重的工作。我怀疑一些内部的 android UI 构建方法左右。 【参考方案1】:很抱歉作为答案发布(没有足够的评论点数),但我相信命名您的 AsyncTasks 和线程,然后使用 DDMS 或任何其他 Android 分析工具可能有助于解决您的问题。
通过找出最耗性能/最耗时的方法和线程,或者可能导致内存过载的东西(使用 DDMS 检查堆)。
看看以下链接:
http://developer.android.com/tools/debugging/ddms.html http://developer.android.com/tools/debugging/debugging-tracing.html
很抱歉,如果这没有任何帮助。
【讨论】:
问题是我已经超过了 dex 方法计数,并且如果不先用 proguard 剥离它,就无法在较旧的 Android 版本上运行该应用程序。所以内存转储或方法分析几乎是没有选择的。以上是关于UI 线程卡在 2.3 设备上的主要内容,如果未能解决你的问题,请参考以下文章