Android的大堆选项是否适用于升级到ICS的旧手机?

时间:2011-12-30 00:42:19

标签: android bitmap android-3.0-honeycomb android-4.0-ice-cream-sandwich

我自己有一个Galaxy Nexus,我知道android:largeHeap="true"清单选项适用于这款手机,但我想知道它是否适用于升级到冰淇淋三明治的旧款手机,即三星Nexus S。

我之所以要问的是,我构建了一个大量使用大位图的应用程序,该应用程序最初是为具有48 MB堆大小的平板电脑而设计的。 Galaxy Nexus还为每个应用程序提供48 MB的可用堆大小,因此我的应用程序在这款手机上运行得非常漂亮,尽管它不是平板电脑。

问题是Nexus S只有32 MB的堆可用,所以我真的需要应用程序的大堆选项才能在这些带有ICS的旧手机上运行。

我的问题: android:largeHeap选项是否仍会增加可用堆内存?即如果Nexus S默认为32 MB,那么我可以使用它来访问64 MB的perhap吗?

对于那些不熟悉此选项的人,它会以降低性能为代价增加应用程序的可用堆内存量。只有在没有其他选择的情况下才能使用它。

更新

以下是显示可用堆大小的应用程序包: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 个答案:

答案 0 :(得分:18)

运行Android 3.0或更高版本的所有设备均可使用android:largeHeap选项。这包括已升级到ICS的设备。

那就是说,你不能保证获得48 MB的空间。提供给应用程序的确切堆大小是设备制造商可以基于每个设备设置的选项。通常,具有较大显示器的设备将配置较大的堆大小。