2017-02-11 141 views
1

嗨我有很簡單的代碼我的圖像都壓縮,所以沒有人超過50kb。當我啓動我的應用程序時,1張圖片被加載,內存使用量約爲42mb,但當我向下滾動到另一張圖片時,其他圖片會導致內存使用量增加到250mb。如何解決它?這裏是我的代碼,請我是初學者,所以試着簡單解釋一下。圖像佔用太多內存

import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 


public class CustomSwip extends PagerAdapter { 
private int[] imageResources = {R.drawable.j1, R.drawable.jg2,R.drawable.jg3, R.drawable.jg4, R.drawable.jg5, R.drawable.jg6, R.drawable.jg7, R.drawable.jg8, R.drawable.jg9, R.drawable.jg10, R.drawable.jg11, R.drawable.jg12, R.drawable.jg13, R.drawable.jg14, R.drawable.jg15, R.drawable.jg16}; 
private Context ctx; 
private LayoutInflater layoutInflater; 

public CustomSwip(Context c) { 
    ctx = c; 
} 

@Override 
public int getCount() { 

    return imageResources.length; 
} 


@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = layoutInflater.inflate(R.layout.activity_custom_swip, container, false); 
    ImageView imageView = (ImageView) itemView.findViewById(R.id.swip_image_view); 
    imageView.setImageResource(imageResources[position]); 
    container.addView(itemView); 
    return itemView; 
} 


@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 

} 


@Override 
public boolean isViewFromObject(View view, Object object) { 

    return (view == object); 
} 

} 
+1

使用'Glide'或'Picasso'庫進行圖像下載/緩存。 –

+0

你的內存使用情況是什麼意思?它是在您的設備內存中用於您的應用程序的存儲內存嗎? –

+0

Android監視器有一個包含logcat,內存,CPU,GPU和網絡監視器的主窗口。在這個窗口中,你可以選擇一個設備和應用程序進程,終止一個應用程序,收集dumpsys系統信息,並創建正在運行的應用程序的屏幕截圖和視頻。它從android監視器 –

回答

1

Universal Image Loadernostra13庫這是非常有案可稽廣泛使用並且已知爲配置設置它提供用於加載圖像。其中,有一個選項可以加載圖像RGB_565,這可以減少大約一半的內存消耗(已經看到實際結果)等等。

在顯示選項中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位圖比ARGB_8888消耗的內存少2倍。

而且一看WeakReferences。它可以幫助垃圾收集器調用內存密集型圖像。

0

根據該文檔爲setImageResource,

這確實位圖讀取和解碼UI線程,這可能導致延遲打嗝上。如果這是一個問題,請考慮使用setImageDrawable(android.graphics.drawable.Drawable)或setImageBitmap(android.graphics.Bitmap)和BitmapFactory代替。

或者簡單地使用的圖像加載庫來延遲加載圖像