gpt4 book ai didi

java - android-Java- 将 WeakReference 转换为普通位图

转载 作者:太空狗 更新时间:2023-10-29 16:23:43 26 4
gpt4 key购买 nike

我一直在开发一个使用大量位图的应用程序,我已经达到了它在我测试过的大多数设备上运行良好的程度,除了运行 2.3.4 的较新的 droid bionic

我收到内存不足错误,并且我可以在 logcat 中看到堆也在增长。到目前为止,我已经尝试使用不同的技术重新调整位图的大小,这些技术适用于所有其他设备,除了新的 droid bionic,这很奇怪,你会认为更新的手机会更好地处理 vm。

我在这里查看了其他一些讨论使用各种方法的线程,但我感兴趣的是使用 Wea​​kReferenced 将图像存储为。这很好,但我如何才能将弱引用转换回普通位图以在 Canvas 上使用。

编辑:这是最近的堆栈跟踪 dumparoo :p

09-30 12:33:09.231  2867  2922 E AndroidRuntime: FATAL EXCEPTION: go
09-30 12:33:09.231 2867 2922 E AndroidRuntime: java.lang.OutOfMemoryError
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:79)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:363)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at graffit.data.ImageGrabber.imagegetter(ImageGrabber.java:164)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at graffit.data.ImageGrabber.traverseIDS(ImageGrabber.java:118)
09-30 12:33:09.231 2867 2922 E AndroidRuntime: at graffit.data.ImageGrabber$getMarkImageThread.run(ImageGrabber.java:238)
09-30 12:33:09.239 480 750 W ActivityManager: Force finishing activity graffit.main/.GraffView
09-30 12:33:09.669 480 873 I ActivityManager: Process graffit.main (pid 2867) has died.
09-30 12:33:09.677 480 590 I WindowManager: WINDOW DIED Window{407c4100 graffit.main/graffit.main.GraffView paused=true}
09-30 12:33:09.677 480 590 I WindowManager: WINDOW DIED Window{408044e0 Toast paused=false}
09-30 12:33:09.684 480 759 I WindowManager: Setting rotation to 0, animFlags=1

最佳答案

您是否使用 Apache DefaultHttpClient 在您的代码中进行 http 调用?

我最近发现了一个 Droid Bionic 特有的问题,导致它在使用 HttpClient 下载文件时使用比其他 Android 设备更多的 VM 内存。如果您在其他设备上没有遇到 OutOfMemoryError,这可能是内存泄漏的真正原因。

在 http 调用期间,您是否有任何指示 OutOfMemoryError 的堆栈跟踪?

我相信 Droid Bionic 构建中可能缺少以下源代码中从第 64 行开始的变通代码:

http://codesearch.google.com/codesearch#CskViEIa27Y/src/org/apache/http/impl/io/SocketInputBuffer.java&q=package:android.git.kernel.org%20file:org/apache/http/impl/io/SocketInputBuffer.java&l=1

您可以在创建 http 客户端时使用 HttpConnectionParams.setSocketBufferSize(params, 8192) 来解决此问题。

关于java - android-Java- 将 WeakReference<Bitmap> 转换为普通位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591224/

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