2011-12-30 6 views
14

自分自身でギャラクシーネクサスを手に入れました。android:largeHeap="true"マニフェストオプションがこの携帯電話で動作することがわかりましたが、アイスクリームサンドイッチ、すなわちSamsung Nexus Sにアップグレードされている古い携帯電話で動作しているかどうかはわかりませんでした。Androidの大きなヒープオプションは、古い携帯電話をICSにアップグレードすると機能しますか?

私は大きなビットマップを大量に使用するアプリケーションを構築しており、アプリケーションはもともと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

希望する情報をダンプしてソースコードを公開しているアプリを整理すると、ICSを実行しているNexus Sで実行されます。 – CommonsWare

+0

ありがとう、私はちょうど利用可能なヒープメモリの量を表示する小さなアプリを書くだろう。私は短い間にコメントにリンクを投稿します。 –

+1

私の更新された質問をソースコードとapkで見てください。 –

答えて

18

android:largeHeapオプションは、Android 3.0以上を搭載するすべての端末で利用できます。これには、ICSにアップグレードされたデバイスも含まれます。

つまり、48 MBの領域を確保することはできません。アプリケーションに提供される正確なヒープサイズは、デバイスメーカーがデバイスごとに設定できるオプションです。一般に、より大きなディスプレイを持つデバイスは、より大きなヒープサイズで構成されます。

+0

ええ、Nexus Sはデフォルトで32 MBのヒープメモリしか与えませんが、アンドロイド:largeHeapオプションは利用可能なヒープメモリの量を2倍にする必要がありますので、私の質問はアップグレードされた古いデバイスで動作するかどうかですICSへ。 –

+0

フラグが機能します。そのフラグを有効にして取得するものは、明確に定義されていません。;)@CommonsWareのように、試して何が起こるか見てみましょう!残念ながら私はオフィスにNexus Sを残しましたが、誰もそれに最初に着くことができなければ、次回のときに試してみることができます。 –

+0

+1。ありがとう、トレバー。非常に感謝:)コメントに私の質問に多かれ少なかれ答えたので、彼は答えとしてそれを追加する場合、私はそれを受け入れる気にしないことを願っています。そうでなければ、私はあなたを受け入れます。乾杯! –