Работает ли опция большой кучи Android для старых телефонов, обновленных до ICS? - PullRequest
14 голосов
/ 30 декабря 2011

У меня есть Galaxy Nexus, и я знаю, что опция манифеста android:largeHeap="true" работает на этом телефоне, но мне было интересно, работает ли он на старых телефонах, которые обновляются до Ice Cream Sandwich, то есть на Samsung NexusS.

Причина, по которой я спрашиваю, состоит в том, что я создал приложение, которое интенсивно использует большие растровые изображения, и изначально оно было разработано для планшетов с размером кучи 48 МБ.Galaxy Nexus также имеет 48 МБ доступного размера кучи для каждого приложения, поэтому мое приложение прекрасно работает на этом телефоне, несмотря на то, что он не планшет.

Проблема в том, что Nexus S имеет только 32 МБ кучидоступно, поэтому мне действительно нужна опция большой кучи, чтобы приложение работало на этих старых телефонах с ICS.

Мой вопрос: Увеличивает ли опция android:largeHeap доступную память кучи?Т.е. если у Nexus S по умолчанию 32 МБ, я смогу получить доступ к perhap 64 МБ, доступным с помощью этого?

Для тех из вас, кто не знаком с этой опцией, она увеличивает объем доступной кучипамять для вашего приложения за счет снижения производительности.Его следует использовать только в том случае, если другой альтернативы нет.

Обновление

Вот пакет приложения, показывающий доступный размер кучи: http://michellbak.dk/TestHeapSize.apk

Исходный код ниже, чтобы показать вам, что нет ничего вредного:

package com.miz.heapsize;

import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    private TextView text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ActivityManager am = ((ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE));
        int memory = am.getMemoryClass();
        int largeMemory = am.getLargeMemoryClass();

        text = (TextView) findViewById(R.id.textView1);
        text.setText("Normal heap size: " + memory + "\nLarge heap size: " + largeMemory);

    }
}

Файл манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.miz.heapsize"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

1 Ответ

18 голосов
/ 30 декабря 2011

Опция android:largeHeap доступна на всех устройствах под управлением Android 3.0 или выше.Это относится и к устройствам, которые были обновлены до ICS.

При этом вам не гарантировано получить 48 МБ свободного места.Точный размер кучи, предоставляемый приложениям, является дополнительным, который производители устройств могут устанавливать для каждого устройства отдельно.Как правило, устройства с большим дисплеем будут настроены с большими размерами кучи.

...