2011-12-30 11 views
14

Tôi có Galaxy Nexus chính mình và tôi biết rằng tùy chọn kê khai android:largeHeap="true" hoạt động trên điện thoại này, nhưng tôi tự hỏi liệu nó có hoạt động trên các điện thoại cũ đang được nâng cấp lên Ice Cream Sandwich hay không, tức là Samsung Nexus S.Tùy chọn heap lớn của Android có hoạt động đối với các điện thoại cũ được nâng cấp lên ICS không?

Lý do tôi hỏi là tôi đã tạo ứng dụng sử dụng nhiều bitmap lớn và ứng dụng ban đầu được thiết kế cho máy tính bảng có kích thước heap là 48 MB. Galaxy Nexus cũng có 48 MB kích thước heap có sẵn cho mỗi ứng dụng, vì vậy ứng dụng của tôi đang hoạt động tốt trên điện thoại này mặc dù nó không phải là máy tính bảng.

Vấn đề là Nexus S chỉ có 32 MB đống, vì vậy tôi thực sự cần tùy chọn heap lớn để ứng dụng hoạt động trên các điện thoại cũ hơn với ICS.

Câu hỏi của tôi: Tùy chọn android:largeHeap vẫn tăng bộ nhớ heap có sẵn không? I E. nếu Nexus S có 32 MB theo mặc định, tôi có thể truy cập perhap 64 MB khả dụng bằng cách sử dụng tính năng này không?

Đối với những người bạn không quen với tùy chọn này, nó tăng số lượng bộ nhớ heap có sẵn cho ứng dụng của bạn với chi phí hiệu suất thấp hơn. Nó chỉ nên được sử dụng khi không có lựa chọn thay thế khác.

Cập nhật

Đây là gói ứng dụng để hiển thị kích thước heap có sẵn của bạn: http://michellbak.dk/TestHeapSize.apk

Mã nguồn có dưới đây để cho bạn thấy rằng không có gì có hại là:

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 file:

<?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

Nếu bạn roi lên ứng dụng đổ thông tin bạn muốn và xuất bản mã nguồn, tôi sẽ chạy nó cho bạn trên Nexus S đang chạy ICS. – CommonsWare

+0

Cảm ơn, tôi sẽ chỉ viết một ứng dụng nhỏ cho biết số lượng bộ nhớ heap có sẵn sau đó. Tôi sẽ đăng một liên kết trong các bình luận trong một thời gian ngắn. –

+1

Vui lòng xem câu hỏi đã cập nhật của tôi với mã nguồn và apk. –

Trả lời

18

Tùy chọn android:largeHeap khả dụng trên tất cả các thiết bị chạy Android 3.0 trở lên. Điều này bao gồm các thiết bị đã được nâng cấp lên ICS.

Điều đó nói rằng, bạn không được đảm bảo nhận được 48 MB dung lượng. Kích thước heap chính xác được cung cấp cho các ứng dụng là một nhà sản xuất thiết bị tùy chọn có thể đặt trên cơ sở mỗi thiết bị. Nói chung, các thiết bị có màn hình lớn hơn sẽ được cấu hình với kích thước heap lớn hơn.

+0

Vâng, Nexus S sẽ mặc định chỉ cung cấp cho bạn 32 MB bộ nhớ heap, nhưng tùy chọn 'android: largeHeap' sẽ tăng gấp đôi số lượng bộ nhớ heap sẵn có, vì vậy câu hỏi của tôi là có hay không hoạt động trên các thiết bị cũ hơn được nâng cấp đến ICS. –

+0

Cờ hoạt động. Những gì bạn sẽ nhận được bằng cách cho phép cờ đó không được xác định rõ ràng.;) Giống như @CommonsWare được đề xuất, hãy thử và xem điều gì sẽ xảy ra! Thật không may, tôi đã để lại chiếc Nexus S trong văn phòng, nhưng nếu không ai đến được nó trước thì tôi có thể thử nó lần sau. –

+0

+1. Cảm ơn, Trevor. Nhiều đánh giá cao :) Đánh dấu nhiều hơn hoặc ít hơn chỉ trả lời câu hỏi của tôi trong các ý kiến, vì vậy tôi hy vọng bạn không nhớ tôi chấp nhận rằng nếu anh ta thêm nó như là một câu trả lời. Nếu không, tôi sẽ chấp nhận của bạn. Chúc mừng! –

Các vấn đề liên quan