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