gpt4 book ai didi

android - 巨大的位图在 android 中导致 ANR

转载 作者:行者123 更新时间:2023-11-29 18:12:43 26 4
gpt4 key购买 nike

事情是这样的:

  • 我正在使用超大位图 [1024 X 1024]
  • 我需要 ( RGB & alpha ) 格式的 BitMap 数据以进行像素级操作;对于这种操作,我使用 native 库
  • Activity 与 [ 512 X 512 ] 图像配合得很好......但是当我在具有类似任务的 Activity 之间切换时,android 崩溃并显示以下跟踪

问题是这样的:

  • 我做错了什么?什么会导致 JiT 调整大小?
  • 有没有办法加载巨大的位图..?如果我使用应用程序缓存;在这种情况下它会给我带来一些好处吗?如果是,那么缓存会消耗哪些内存?主要是我达到了内存限制......所以我正在努力解决这个问题......

痕迹:

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

请注意:

  • 我目前在 API 10 上运行 [没有使用 API 11 或更高版本的范围]
  • 我也无法使用“android:largeHeap”选项
  • 当我使用 native 库时,我达到了 6 MB 的限制 [ native 内存],尽管我有 32 MB 的内存供我使用...

更新: [ANR 跟踪]

此 ANR 跟踪指示 KeyDispatchingTimedOut ..但我相信这不是原因...当单击“菜单”时,我正在使用 Intent 切换到另一个 Activity ..当此 Activity 启动时,它需要计算“背景图像”基于使用 native 库的“颜色数组”……这需要很长时间……请注意,当 Activity 单独启动时,会发生相同的计算......

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

最佳答案

ANR 并不是真正的内存问题,而是在 UI 线程(调试器中的“主”)上执行某些操作所花费的时间过长的问题。您在 UI 线程上所做的任何工作都需要快速,否则将触发 ANR 看门狗。您正在执行的长时间运行的过程导致需要将其放入另一个线程。

您需要将计算背景图像的工作转移到一个单独的线程中。我建议您使用仅使用进度微调器加载 Activity 并启动后台线程的方法,然后您拥有实际显示 UI 的所有内容,隐藏微调器并显示您想要设置背景图像的 View 。

请注意,您只能从 UI 线程更改 View ,例如调用 API View.setBackgroundDrawable(...) ,但您可以在后台线程中构造 Drawable,然后设置它来自 UI 线程。 AsyncTask 非常适合这种工作模式。如果您不使用 AsyncTask,那么您将使用 API Activity.runOnUiThread(...)

关于android - 巨大的位图在 android 中导致 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com