事情就是这样:
问题是:
追踪:
03-22 14:21:05.240: I/dalvikvm(105): Jit: resizing JitTable from 8192 to 16384
03-22 14:21:05.730: D/dalvikvm(196): GC_EXPLICIT freed 44K, 50% free 3130K/6151K,external 5368K/6703K, paused 713ms
请注意:
更新: [ANR追踪]
此ANR跟踪指示KeyDispatchingTimedOut ..但我认为这不是原因......当点击“菜单”时我正在使用Intent切换到另一个活动..当此活动启动时,它需要计算“背景图片“基于”颜色数组“使用本机库...这需要很长时间...... 请注意,当单独启动活动时,会发生相同的计算...
E/ActivityManager(105): ANR in com.uc (com.uc/.UcMain)
E/ActivityManager(105): Reason: keyDispatchingTimedOut
E/ActivityManager(105): Load: 2.31 / 1.58 / 1.48
E/ActivityManager(105): CPU usage from 29434ms to 1ms ago:
E/ActivityManager(105): 97% 1737/com.uc: 97% user + 0.1% kernel / faults: 117 minor
E/ActivityManager(105): 1.4% 73/akmd: 0% user + 1.4% kernel
E/ActivityManager(105): 0.6% 105/system_server: 0.2% user + 0.3% kernel / faults: 9 minor
答案 0 :(得分:3)
ANR实际上不是一个内存问题,在UI线程(调试器中的'main')上做一些事情需要花费太长时间。您在UI线程上执行的任何工作都需要快速或将触发ANR监视器。您正在执行的长时间运行过程会导致将此需要放入另一个线程中。
您需要将正在进行的工作移动到单独的线程中来计算背景图像。我建议您使用只使用进度微调器加载Activity的方法并启动后台线程,然后您可以实际显示UI隐藏微调器并显示您想要设置背景图像的视图。
请注意,您只能从UI线程更改Views,例如调用API View.setBackgroundDrawable(...)
,但您可以在后台线程中构造Drawable,然后从UI线程设置它。 AsyncTask适用于这种工作模式。
如果您不使用AsyncTask
,那么您将使用API Activity.runOnUiThread(...)