複数の 3D モデルを使用する Android アプリケーションを作成しています。このようなテクスチャ付きのモデルは、大量のメモリを消費する可能性があります。製造元がアプリケーションが使用できるヒープ サイズに制限を設定していることを知りました。たとえば、私のタブレット Samsung Galaxy Tab 8.9 P7310 は 64MB のメモリを占有します。
アプリケーションが使用できるメモリのサイズを増やす方法はありますか?
複数の 3D モデルを使用する Android アプリケーションを作成しています。このようなテクスチャ付きのモデルは、大量のメモリを消費する可能性があります。製造元がアプリケーションが使用できるヒープ サイズに制限を設定していることを知りました。たとえば、私のタブレット Samsung Galaxy Tab 8.9 P7310 は 64MB のメモリを占有します。
アプリケーションが使用できるメモリのサイズを増やす方法はありますか?
android:largeHeap="true"を使用してより大きなヒープ サイズをリクエストできますが、これは Honeycomb 以前のデバイスでは機能しません。2.3 より前のデバイスでは、VMRuntime クラスを使用できますが、これは Gingerbread 以降では機能しません。
NDK は SDK のようなメモリ制限を課さないため、制限をできるだけ大きくする唯一の方法は、NDK を介してメモリ集約型のタスクを実行することです。
または、現在表示されているモデルの部分のみをロードし、必要に応じて残りをロードし、未使用の部分をメモリから削除することもできます。ただし、アプリによっては、これができない場合があります。
アプリケーションが使用できるメモリのサイズを増やす方法はありますか?
API レベル 11 以降で実行されているアプリケーションは、マニフェスト内android:largeHeap="true"
の<application>
要素を使用して、通常よりも大きなヒープ サイズを要求getLargeMemoryClass()
できます。on は、そのヒープの大きさActivityManager
を示します。でも:
これは API レベル 11+ (つまり、Honeycomb 以降) でのみ機能します。
大きなヒープの大きさは保証されていません
ユーザーは大きなヒープ リクエストを認識します。これは、他のアプリを強制的に RAMから解放し、他のアプリのプロセスを終了してシステム RAM を解放し、大きなヒープで使用できるようにするためです。
#3 と、android:largeHeap
悪用されることが予想されるため、このサポートは将来放棄されるか、インストール時にユーザーに警告される可能性があります (たとえば、特別な許可を要求する必要があります)。 )
現在、この機能は軽く文書化されています
ヒープ サイズを動的に増やすことはできません。
android:largeHeap="true"
マニフェストで使用することにより、さらに使用するように要求できます。
また、 を使用できるためnative memory (NDK & JNI)
、実際にはヒープ サイズの制限を回避できます。
ここに私がそれについて作ったいくつかの投稿があります:
そして、ここに私が作ったライブラリがあります:
2 番目のプロセスを使用します。AndroidManifest
newService
で宣言する
android:process=":second"
1次工程と2次工程の入れ替えBroadcastReceiver
これは、Android OS に応じて 2 つの方法で行うことができます。
android:largeHeap="true"
して、より大きなヒープ サイズを要求できますが、これは Honeycomb 以前のデバイスでは機能しません。VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE);
HeapSize を設定する前に、他のアプリケーションや OS の機能に影響を与えない適切なサイズを入力したことを確認してください。設定する前に、アプリのサイズを確認してから、仕事を遂行するためだけにサイズを設定してください。他のアプリが影響を与える可能性があるため、メモリを大量に使用しないでください。
参考:http ://dwij.co.in/increase-heap-size-of-android-application
私が覚えていることからVMRuntime
、初期の Android バージョンでは class を使用できましたが、現在は使用できなくなりました。
ただし、モバイル環境で開発者にヒープサイズを選択させることは、それほど安全とは言えません。アプリケーション自体からヒープ サイズを変更しようとするよりも、(プログラミング側ではなく) 特定のデバイスでヒープ サイズを変更する方法を見つける方が簡単だと思います。
Java ヒープを増やすと、不足しているモバイル リソースが不当に消費されます。場合によっては、ガベージ コレクターを待つだけで十分であり、ヒープ スペースが減ってから操作を再開できます。次に、この静的メソッドを使用します。