1

問題は最後の行で発生し、そのような配列を新しくしようとすると、折りたたまれます。Logcat では、「java.lang.OutOfMemoryError」と表示されます。どう言う意味ですか?助けてください。

Bitmap bmap;
Bitmap bMapRotate;
int bmapWidth;
int bmapHeight;
int[] bmapColorArray;
int bmapColorArraySize;

bmapWidth = bmap.getWidth();
bmapHeight = bmap.getHeight();
bmapColorArraySize = bmapWidth * bmapHeight;
bmapColorArray = new int[bmapColorArraySize];
bmap.getPixels(bmapColorArray, 0, bmapWidth, 0, 0, bmapWidth, bmapHeight);

そして、この int Array をネイティブ レイヤーに渡すように呼び出します。

4

3 に答える 3

3

Android アプリケーションで使用できるメモリの量は限られています。画面の解像度/サイズに応じて、16MB から 24MB まで (IIRC)。

そのため、大きな画像 (10M ピクセル) に複数の配列を割り当てると、メモリがすぐにいっぱいになります。

必要な情報だけを保存するようにしてください。縮小版の画像を使用している場合 (おそらくそうです)、完全なオリジナルの代わりに縮小版を保存してください。また、(おそらく)二度と使用しない画像をメモリに保持しないでください。

言い換えれば、特に大量のメモリを割り当てる場合は、メモリを控えめにするようにしてください。

于 2013-01-23T08:00:26.187 に答える
0

クラッシュを回避したい場合は、これを試してください。

 Runtime runtime = Runtime.getRuntime();  

    Log.d("Free memory",""+runtime.freeMemory());  

    if(runtime.freeMemory()>(h*w)) 
    {
        int[] i = new int[h* w];
    }
    else
    {
        Toast.makeText(getApplicationContext(),"No More Heap memory",Toast.LENGTH_LONG).show();
     }
于 2016-05-30T09:56:08.877 に答える
0

ガベージ コレクターを手動で呼び出します。

System.gc();
于 2013-01-23T09:06:06.353 に答える