У меня есть Galaxy Nexus, и я знаю, что на этом телефоне работает опция манифеста android:largeHeap="true"
, но мне было интересно, работает ли он на старых телефонах, которые обновляются до Ice Cream Sandwich, то есть Samsung Nexus S.Использует ли большой вариант кучи Android для старых телефонов, обновленных до ICS?
Причина, по которой я спрашиваю, заключается в том, что я создал приложение, которое сильно использует большие растровые изображения, и приложение изначально предназначалось для планшетов размером 48 МБ. Galaxy Nexus также имеет 48 Мб доступного размера кучи для каждого приложения, поэтому мое приложение прекрасно работает на этом телефоне, несмотря на то, что оно не является планшетом.
Проблема заключается в том, что у Nexus S имеется только 32 МБ кучи, поэтому мне действительно нужна опция большой кучи для работы приложения на этих старых телефонах с ICS.
Мой вопрос: Опция android:largeHeap
все еще увеличивает доступную память кучи? То есть если Nexus S по умолчанию имеет 32 МБ, смогу ли я получить доступ к perhap 64 МБ, используя это?
Для тех, кто не знаком с этой опцией, он увеличивает объем доступной памяти кучи для вашего приложения за счет снижения производительности. Его следует использовать только тогда, когда нет другой альтернативы.
Update
Вот пакет приложений, чтобы показать ваш имеющийся размер кучи: 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);
}
}
Manifest файл:
<?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>
Если вы взломаете приложение, которое выгружает нужную вам информацию и публикует исходный код, я запустил ее для вас на Nexus S, работающем с ICS. – CommonsWare
Спасибо, я просто напишу небольшое приложение, которое покажет количество доступной памяти кучи. В ближайшее время я опубликую ссылку в комментариях. –
Пожалуйста, посмотрите мой обновленный вопрос с исходным кодом и apk. –