2011-12-30 2 views
14

나 자신이 갤럭시 넥서스를 가지고 있는데, android:largeHeap="true" 매니페스트 옵션이이 휴대 전화에서 작동한다는 것을 알고 있지만 아이스크림 샌드위치 (예 : 삼성 Nexus S)로 업그레이드되는 구형 휴대 전화에서 작동하는지 궁금합니다.안드로이드의 대형 힙 옵션은 ICS로 업그레이드 된 오래된 휴대폰에서 작동합니까?

내가 묻는 이유는 큰 비트 맵을 많이 사용하는 응용 프로그램을 만들었 기 때문에 응용 프로그램이 원래 힙 크기가 48MB 인 태블릿을 위해 설계 되었기 때문입니다. Galaxy Nexus는 각 응용 프로그램에 사용할 수있는 힙 크기가 48MB이므로 응용 프로그램이 태블릿이 아닐지라도이 전화기에서 아름답게 작동합니다.

문제는 Nexus S는 32MB의 힙만 사용할 수 있기 때문에 ICS가있는 구형 전화에서 작동하도록 응용 프로그램에 큰 힙 옵션이 필요합니다.

내 질문 :android:largeHeap 옵션은 여전히 ​​사용 가능한 힙 메모리를 늘립니까? 나는. Nexus S의 기본 용량이 32MB 인 경우이 기능을 사용하여 64MB의 버블을 액세스 할 수 있습니까?

이 옵션에 익숙하지 않은 사용자는 응용 프로그램의 사용 가능한 힙 메모리가 늘어나고 성능이 저하됩니다. 다른 대안이 없을 때만 사용해야합니다. 여기에 업데이트

는 사용 가능한 힙 크기를 표시하는 응용 프로그램 패키지입니다 : 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로 업그레이드 된 장치가 포함됩니다.

즉, 48MB의 공간을 확보 할 수는 없습니다. 응용 프로그램에 제공되는 정확한 힙 크기는 장치 제조업체가 장치별로 설정할 수있는 옵션입니다. 일반적으로 디스플레이가 큰 장치는 큰 힙 크기로 구성됩니다.

+0

예, Nexus S는 기본적으로 32MB의 힙 메모리 만 제공하지만 'android : largeHeap' 옵션은 사용 가능한 힙 메모리의 양을 두 배로 늘려야하므로 제 질문은 업그레이드 된 구형 장치에서 작동하는지 여부입니다 ICS에. –

+0

플래그가 작동합니다. 해당 플래그를 활성화하여 얻을 수있는 것은 명확하게 정의되지 않았습니다.;) @CommonsWare가 제안한 것처럼, 시도해보고 어떻게되는지 살펴 봅시다! 불행히도 사무실에 Nexus S를 남겨 뒀지 만 아무도 처음에 도착하지 않으면 다음 번에 다시 시도 할 수 있습니다. –

+0

+1. 고마워, 트레버. 많이 감사드립니다 :) 코멘트에 내 질문에 답을 더 많이 또는 적게 표시하여 답변으로 추가하면 동의하지 않길 바랍니다. 그렇지 않다면 나는 너의 것을 받아 들일 것이다. 건배! –