3

私は単一の特定の電話 (個人の電話で実行する必要があるだけ) 用の Android アプリケーションを作成しており、RGB カラーを HSV に効率的に変換するために使用したい次の大きな配列を利用する必要があります。

RainbowTable = new float[256*256*266][3];

この配列の合計サイズは、256*256*256*3*4B = 201326592B = 192MB になります。Android タスク マネージャーによると、アプリをデバッグするとout of memory exception、実行前に約 300MB の RAM がまだ空いているにもかかわらず、.

マニフェスト ファイルでlarge-heap-option を既に設定しています。true

このエラーを回避し、必要な量の RAM を保持するにはどうすればよいですか?

編集:私の電話はルート化されているため、アプリケーションごとのメモリ ヒープのサイズを増やす可能性があります。

4

5 に答える 5

2

各デバイスには、アプリごとの RAM の上限があります。マニフェストでこの呼び出しを行っても問題が解決しない場合:

android:largeHeap="true"

その場合、NDK を使用してコードを記述するしかありません。しかし、これは非常に難しいことなので、最初に別の方法を見つけようと思います。

于 2013-01-18T18:36:27.507 に答える
2

最大ヒープ サイズはデバイスに依存し、192MB は現時点でデバイスで許可されている制限を超える可能性があります。

ただし、この回答は、 NDKを使用してより多くのメモリを割り当てることができることを示しています。

于 2013-01-18T18:37:28.130 に答える
1

このlargeHeap=trueを既に試した場合、有効な解決策があるとは思えません。通常、単一のメモリ ヒープのサイズは、デバイスに応じて最大 24 ~ 48 MB になる可能性があります。

于 2013-01-18T18:33:01.710 に答える
0

ByteBufferを使用できます

ByteBuffer byteBuffer = ByteBuffer.allocate( bigSize);
于 2013-01-18T18:45:50.523 に答える
-2

はい、このメモリの問題は、アプリが大きなメモリを使用している場合に発生します。System.gc(); を呼び出してください。これにより、ガベージ コレクターが明示的にクリアされます。Android のすべてのアプリは、約 16 MB の限られた量のメモリを使用します。だからこれを試してください。

于 2013-01-18T18:36:45.817 に答える