Android Bitmap には recycle() がないため、ネイティブ メモリが急増します

Android Bitmap には recycle() がないため、ネイティブ メモリが急増します

android8.0以降、ビットマップはJava層からネイティブ層に転送され、これによりJVMのメモリ負荷が軽減され、グラフィックスの読み込み速度が向上しますが、不適切なビットマップの割り当て/解放ロジックによりメモリの問題が奥深くに隠れる原因となります。ネイティブ レイヤー、より隠されており、見つけるのが困難です。

ビットマップが「メモリ」にロードされると、2 つの部分に分割されます。最初の部分はビットマップ記述情報で、2 番目の部分 (最大の部分) はビットマップ ピクセル (バイト配列) です。最初の部分には Java メモリが含まれ、2 番目の部分には C/C++ によって維持されるネイティブ メモリが含まれます。Bitmap の recycle() 関数は、C/C++ のネイティブ メモリを解放します。recycle() がない場合、GC は Java メモリの一部のみをリサイクルし、C/C++ のネイティブ メモリは占有されたままになります。解決策: 上位レベルの Java コードでビットマップを使用した後、ビットマップとリサイクル コードを積極的かつ手動でリサイクルする必要があります。

 if (mBitmap != null) {
      mBitmap.recycle();
      mBitmap = null;
 }

 

 

おすすめ

転載: blog.csdn.net/zhangphil/article/details/129307024