2011-12-30 3 views
14

У меня есть 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> 
+1

Если вы взломаете приложение, которое выгружает нужную вам информацию и публикует исходный код, я запустил ее для вас на Nexus S, работающем с ICS. – CommonsWare

+0

Спасибо, я просто напишу небольшое приложение, которое покажет количество доступной памяти кучи. В ближайшее время я опубликую ссылку в комментариях. –

+1

Пожалуйста, посмотрите мой обновленный вопрос с исходным кодом и apk. –

ответ

18

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

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

+0

Да, Nexus S по умолчанию предоставит вам 32 Мб памяти кучи, но опция 'android: largeHeap' должна удвоить количество доступной памяти кучи, поэтому мой вопрос заключается в том, работает ли это на более старых устройствах, которые были обновлены для ICS. –

+0

Флаг работает. То, что вы получите, включив этот флаг, не так четко определено.;) Подобно предложению @CommonsWare, давайте попробуем его и посмотрим, что произойдет! К сожалению, я оставил свой Nexus S в офисе, но если никто не доберется до него, я могу попробовать его в следующий раз, когда я нахожусь. –

+0

+1. Спасибо, Тревор. Очень ценится :) Марк более или менее ответил на мой вопрос в комментариях, поэтому я надеюсь, что вы не возражаете, если я приму это, если он добавит его в качестве ответа. Если нет, я приму твое. Ура! –