2017-02-11 1 views
1

안녕하세요 저는 이미지가 모두 압축되어있어 아무도 50kb 이상을 가지지 않는 매우 단순한 코드를 가지고 있습니다. 내 응용 프로그램을 시작하면 1 이미지가로드되고 메모리 사용량은 약 42MB이지만 다른 이미지로 스크롤하면 다른 모든 이미지가 메모리 사용량을 최대 250MB까지 증가시킵니다. 그것을 고치는 방법? 여기 내 코드가 있으며 초보자입니다. 그래서 간단하게 설명해보십시오. setImageResource 용 문서에 따르면이미지가 너무 많은 메모리를 가지고 있습니다.

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 Monitor에는 logcat, 메모리, CPU, GPU 및 네트워크 모니터가 포함 된 기본 창이 있습니다. 이 창에서 작업 할 장치 및 응용 프로그램 프로세스를 선택하고, 응용 프로그램을 종료하고, dumpsys 시스템 정보를 수집하고, 실행중인 응용 프로그램의 스크린 샷 및 비디오를 만들 수 있습니다.이 메모리를 안드로이드 모니터에서 가져올 수 있습니다 –

답변

1

Universal Image Loader에 이미지 로딩 라이브러리를 꽤입니다 nostra13하여 라이브러리입니다 사용 잘 설명 널리를 사용하고 제공하는 구성 설정 알려져있다 이미지를로드하는 데 사용됩니다. 거기에는 이미지를로드하는 옵션이 있습니다 RGB_565 귀하의 메모리 소비를 약 절반 (실제로 결과를 보았습니다) 및 더 많은 감소시킬 수 있습니다.

표시 옵션에 .bitmapConfig (Bitmap.Config.RGB_565)를 사용하십시오. RGB_565의 비트 맵은 ARGB_8888보다 2 배 적은 메모리를 사용합니다.

그리고 WeakReferences 번을 살펴보십시오. 메모리 집약적 인 이미지를 위해 Garbage Collector를 호출하는 데 도움이 될 수 있습니다.

0

,

이것은 딸꾹질 지연을 일으킬 수있는 UI 스레드에 대한 비트 맵의 ​​판독 및 복호화한다. 그게 걱정된다면 setImageDrawable (android.graphics.drawable.Drawable) 또는 setImageBitmap (android.graphics.Bitmap) 및 BitmapFactory를 대신 사용해보십시오.

하거나 게으른로드 이미지

관련 문제