3

マニフェストでAndroid:LargeHeap="true"オプションを使用して、少し余分なメモリを取得したいと思います (高解像度 1980x1200 ディスプレイで 5 MB 以上のビットマップを扱っており、すぐにさらに大きなディスプレイが期待されます。

Android でのビットマップの貧弱なメモリ処理に対処するためのすべての通常のトリックを使い果たしました (つまり、断片化されたメモリに十分な大きさの穴があるかどうかを知る方法は、クラッシュしないことを試して祈る以外にありません)。 )。メモリを最小限に抑えてクラッシュを防ぐために、最適化、トリミング、およびその他のトリックの適用にすでに数週間を費やしてきました。これは、2.x と 3.x/4.x でどの機能を実行できるかというトリックですが、すべてを 1 つのアプリに保持します。「ビットマップを最適化する方法」を指摘する必要はありません-私はすでにこれらを調べて、できることを適用しました。

LargeHeap はバージョン 2.x ではサポートされていません。また、2.x で LargeHeap オプションを必要としない低解像度の画面には別の画像を使用しています。(メモリ不足の問題もありません)。

android:minSdkVersion="8" の場合、Android:LargeHeap オプションはまったく許可されません。

3.x のシステムに条件付きで LargeHeap を含め、2.x では無視する方法はありますか? または、3.x が検出された場合、アプリケーション自体が LargeHeap を設定しようとしますか? これを行う方法が見つかりませんが、おそらくいくつかのトリックを見落としています。

また、LargeHeap がかなりひどいことも認識していますが、他のトリックが不足しています。理想的には、プログラム OnCreate で本当に必要な (そして許可されている) 場合にのみ、LargeHeap をプログラムで実行するとよいでしょう。

4

3 に答える 3

5

私はこの方法を使用します:

AndroidManifest.xml で

android:largeHeap="@bool/largeheap"

そして、2 つの configuration.xml ファイルを作成します

最初の値: configuration.xml

<bool name="largeheap">false</bool>

values-v11 の 2 番目 (バージョン >= 11 でのみ使用)

<bool name="largeheap">true</bool>
于 2014-04-24T13:08:45.833 に答える
5

android:minSdkVersion="8" の場合、Android:LargeHeap オプションはまったく許可されません。

はい、そうなります。

ここで、ビルド ターゲット([プロパティ] > [Android] など) が API レベル 8 に設定されている場合、コンパイルされません。ビルド ターゲット API レベル 11 以上でコンパイルする必要があります。しかしandroid:minSdkVersion、それとは何の関係もありません。このオプションは、古いデバイスでは単に無視されます。

3.x のシステムに条件付きで LargeHeap を含め、2.x では無視する方法はありますか?

マニフェストの要素で使用android:largeHeap="true"します。<application>

または、3.x が検出された場合、アプリケーション自体が LargeHeap を設定しようとしますか?

私の知る限り、これを設定するプログラム的な手段はありません。

于 2013-01-11T01:18:19.283 に答える