1

私たちのアプリにはたくさんの画像があります。彼らが必要なとき、私たちはそのような方法でそれらを手に入れます:PlayN.assets().getImage("imageURL");

Android 2.3 では、24 MB のビットマップ リソースに制限があります。したがって、Screen2 (ゲームとしましょう) に画像を表示している間、Screen1 (Intro としましょう) から画像を非表示 (アンロード) する必要があります。Screen1 からの画像への参照があり、clear() メソッドを呼び出すことができます: CanvaseImage referenceToImage - アンロードする必要があります。 referenceToImage.canvas().clear();

しかし、- この方法では、2.3.x で Android メモリから画像をアンロードしません - ( Android: Bitmap recycle() どのように機能しますか? ... この投稿では、ビットマップが格納されているため、ビットマップで recycle() を呼び出す必要があることを伝えています非管理メモリであり、GC によってそこから縮小することはできません。)

Screen1の画像がメモリからアンロードされていない場合、私はAndroid用のそのようなstackTraceを持っています:

06-11 09:16:45.197: E/AndroidRuntime(23621): FATAL EXCEPTION: GLThread 
10 
06-11 09:16:45.197: E/AndroidRuntime(23621): 
java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap 
Size=9479KB, Allocated=6032KB, Bitmap Size=23347KB) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:694) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.android.AndroidAssets.decodeBitmap(AndroidAssets.java:158) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.android.AndroidAssets.doGetImage(AndroidAssets.java:79) 
06-11 09:16:45.197: E/AndroidRuntime(23621):    at 
playn.core.AbstractAssets.getImage(AbstractAssets.java:39) 

Android 2.3.x メモリ モデルでビットマップをリサイクルするための playN の魔法を呼び出す方法はありますか?

4

2 に答える 2

1

メモリ管理に関するGoogle の記事はもうご覧になりましたか? 彼らは実際に、そのビットマップの問題に対処する方法についてかなり詳細に説明しています.

于 2012-06-19T07:37:31.023 に答える
1

ビットマップのキャッシュにLruCacheを使用しないのはなぜですか? こちらの記事をご覧ください

于 2012-06-19T07:37:58.527 に答える