簡體   English   中英

android 495KB圖像占用10MB的堆大小

[英]android 495KB image taking 10MB of Heap size

我正在嘗試在尺寸為495KB的應用程序中加載圖像。 如果我加載此映像,則堆大小從25MB增加到35MB,這會導致我的應用程序出現實際內存問題。 如果我不加載此圖像比堆大小保持在25MB。 誰能說出為什么要占用這么多堆大小?

圖片如下 在此處輸入圖片說明

我用來加載圖像的代碼是

    InputStream s4 = getResources().openRawResource(R.drawable.parallax_layer4);    
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
    System.gc();
    if(bitmap4 != null) {
        bitmap4.recycle();
    }
    s3 = null;
    System.gc();     

    bitmap4 = bitmap(s4);
    layer4Back = new ImageView(this);
    layer4Back.setImageBitmap(bitmap4);
    layer4Back.setScaleType(ScaleType.FIT_XY);
    parallaxLayout.addView(layer4Back, 3, lp);
    try {
        s4.close();
    } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
    }
    s4 = null;
    System.gc();

private static Bitmap bitmap(final InputStream is) {
    Bitmap bitmap = null;
    System.gc();
    Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    options.inSampleSize = 1; 

    try {
       // bitmap = BitmapFactory.decodeStream(is);
       bitmap = BitmapFactory.decodeStream(is, null, options);

    } catch (Error e) {
       // TODO: handle exception
       e.printStackTrace();
    }
    return bitmap;
}

謝謝阿亞茲·阿拉維

圖像文件加載到內存后將被解壓縮。 在5600 x 480像素和每像素32位的情況下,未壓縮的圖像幾乎可以精確到10 MB。

我的建議是將其切成較小的部分,然后僅加載您需要的部分。

5,600px * 480px * 4字節= 10,752,000字節,因此這不足為奇。

在“ 有效顯示位圖”一文中有一些很好的指導,以及關於SO討論好的解決方案的許多問題。

那么您期望什么? 圖像是5600 x 480像素,現在內存中的每個像素都需要32位(請給我指正)。 算一下,您就會知道為什么會出現問題。 您需要使用較小的圖像,或者將圖像切成一部分,並在需要時加載所需的部分,並丟棄不必要的部分。

我有一個類似的問題在這里討論: 重新啟動時,Android應用程序崩潰導致內存不足

這里也有關於主題和可能解決方案的長時間討論: 將圖像加載到Bitmap對象時出現內存不足問題

如果加載位圖並且具有高DPI屏幕分辨率,則BitmapFactory將自動縮放位圖。 我認為,在具有最大DPI值的設備上,它在兩個方向上都會縮放2倍。

這可以解釋一些意外的增加。 嘗試將圖像放在名為drawable-nodpi文件夾drawable-nodpi ,它們將不會縮放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM