20

現在、Android2.3と4以降の両方で実行するように設計されたコードがあります。

android:largeHeapAndroidManifest.xmlに適用されている場合、コードのパフォーマンスは大幅に向上します(ほとんどの場合、OutOfMemory例外が発生しません) 。

<application
    android:name=".MyApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:screenOrientation="nosensor"
    android:largeHeap="true"

現在、android:minSdkVersion10ではなく15に設定する必要があります(Android2.3)。そうでない場合android:largeHeap、AndroidManifest.xmlでは許可されません。

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

単一のAPK内で、どのように設定できるか

  • android:largeHeapAndroid 4以降を使用している場合は、オプションを使用してください
  • android:largeHeapAndroid 2.3を使用している場合は、オプションを使用しないでください
4

5 に答える 5

73

Honeycomb で大きなヒープを無効にして、ICS または JB で有効にすることもできます。ちょっとハッキーか何か。これが私が試したものです。

先に進む前に、ビルド ターゲットを Honeycomb、Jelly Bean、または ICS に変更して、android:largeHeap属性を配置できるようにします。android:minSdkVersionに設定することもできますAPI 10

AndroidAPI 10は大きなヒープをサポートしていません。

  1. values-v14フォルダ内にresフォルダを作成
  2. で作成bools.xmlしましたvalues-v14
  3. この値をbools.xmlof に入れますvalues-v14

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

values>bools.xmlまたはvalues-[API VERSION]>のブール値でbools.xml、別の API バージョンまたはデフォルトで大きなヒープを無効にします。

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

ハードコーディングされたまたはの代わりにの値を変更しandroid:largeHeapます@bool/largeheaptruefalse

<application
        android:largeHeap="@bool/largeheap"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher">
                ....
</application>

メモリ リーク アプリケーションを作成するか、巨大なビットマップをロードするだけで、このコードをテストしました。

幸運を!

于 2013-02-19T06:53:41.960 に答える
9

android:largeHeap="true"属性をに保持しますAndroidManifest.xml。これをサポートしていないバージョンでは、これを無視する必要があります。次に、古いバージョンをサポートするために、VMRuntimeクラスを使用してヒープサイズを設定します(必要に応じてリフレクションを使用)。

このトピックの詳細:Androidアプリケーションのヒープサイズを増やす方法は?

于 2013-02-21T19:43:34.863 に答える
1
  1. 1.ターゲット Android 3.0 (API 11) 以降でプロジェクトをビルドします。(プロジェクト プロパティ - Android - プロジェクト ビルド ターゲット - API レベル 11 より上を選択)

  2. マニフェスト ファイルで、uses-sdk の値を次のように変更します。

    < uses-sdk android:minSdkVersion="10" android:targetSdkVersion="11" />

Android 3.0 の以前のバージョンでは、メモリ操作に VMRuntime クラスを使用できます。

于 2013-02-19T07:08:19.253 に答える
0

project.propertiesファイルに正しくないターゲット sdk があるようです。それをチェックして、ターゲットを AndroidManifest の targetSdk (15) に変更し、プロジェクトを再構築します。

プロジェクトのプロパティ

# Project target.
target=15

PS android:largeHeap をプロジェクト (minSdk = 7、targetSdk = 17) に追加して、すべての Android バージョンでコンパイルして正常に実行しようとしました。

于 2013-02-19T06:23:16.530 に答える