Отличается ли опция большой кучи Android для старых телефонов, обновленных до ICS?
У меня есть Galaxy Nexus, и я знаю, что на этом телефоне работает манифест android:largeHeap="true"
, но мне было интересно, работает ли он на старых телефонах, которые обновляются до Ice Cream Sandwich, то есть Samsung Nexus S.
Причина, по которой я прошу, заключается в том, что я создал приложение, которое сильно использует большие растровые изображения, и приложение изначально предназначалось для планшетов с размером памяти 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
Параметр android:largeHeap
доступен на всех устройствах под управлением Android 3.0 или выше. Это включает устройства, которые были обновлены до ICS.
Тем не менее, вам не гарантировано получить 48 МБ пространства. Точный размер кучи, предоставляемый приложениям, - это производители опционных устройств, которые могут устанавливаться для каждого устройства. В общем случае устройства с большим дисплеем будут сконфигурированы с большими размерами кучи.