簡體   English   中英

android-Java-轉換WeakReference <Bitmap> 到普通的位圖

[英]android-Java- converting a WeakReference<Bitmap> to a normal Bitmap

我已經在使用大量位圖的應用程序上工作了一段時間,我已經了解到它在經過Ive測試的大多數設備上都可以正常工作,除了運行2.3.4的較新的droid bionic。

我遇到內存不足錯誤,並且可以在logcat中看到堆的增長。 到目前為止,我已經嘗試使用不同的技術來調整位圖的大小,這對其他設備都適用,但新的droid bionic卻很奇怪,因為您會認為較新的手機會更好地處理vm。

我已經看過這里討論使用各種方法的其他線程,但是我感興趣的一個線程涉及使用WeakReferenced將圖像存儲為。 很好,但是如何將弱引用轉換回普通位圖以在畫布上使用。

編輯:這是最近的堆棧跟蹤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&升= 1

您可以在創建http客戶端時使用HttpConnectionParams.setSocketBufferSize(params,8192)修復此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM