뷰페이져로 이미지를 뿌려주면서 플리킹 해주는 것이 상당히 많은 메모리를 잡아 먹더라구요.
결국은 앱이 종료되버립니다.. out of memory로요ㅠㅠ
일단 페이져 어답터는 아래와 같습니다.
플리킹하여 이미지가 바뀔때마다 계속해서 메모리가 늘어나고,, 해제는 되지 않고..ㅜㅜㅜ
결론은 image_view.findViewById(view_name).setBackgroundDrawable(null);를 적절한 위치에 넣어주어 메모리가
증가되는 것을 막아야 할 것같은데
여기서부터 막막해져버렸네요ㅠㅠ
혹시 도움 주실 수 있는 분 계시나 해서 질문 올려봅니다.ㅠㅠ
//Pager 아답터 구현
private class BkPagerAdapter_pop extends PagerAdapter{
private LayoutInflater mInflater;
public BkPagerAdapter_pop( Context con) {
super();
mInflater = LayoutInflater.from(con);
}
@Override public int getCount() { return db_count; } //여기서는 2개만 할 것이다.
//뷰페이저에서 사용할 뷰객체 생성/등록
@Override public Object instantiateItem(View pager, int position) {
image_view = null;
for(int i = 0; i < db_count; i++)
{
if(position == i)
{
image_view = Inflater.inflate(R.layout.layout1, null);
int drawableResource_img1 = res.getIdentifier(image_array.get(i), "drawable", pack);
image_view.findViewById(view_name).setBackgroundResource(img_name);
int height=this.getResources().getDrawable(img_name).getMinimumHeight()/2;
int width=this.getResources().getDrawable(img_name).getMinimumWidth()/2;
LinearLayout.LayoutParams layout_content_params = new LinearLayout.LayoutParams(
width, height);
layout_content_params.gravity = Gravity.CENTER;
v.findViewById(view_name).setLayoutParams(layout_content_params);
v.setPadding(0, top_padding, 0, 0);
}
}
((ViewPager)pager).addView(image_view, 0);
return image_view;
}
//뷰 객체 삭제.
@Override public void destroyItem(View pager, int position, Object view) {
((ViewPager)pager).removeView((View)view);
}
// instantiateItem메소드에서 생성한 객체를 이용할 것인지
@Override public boolean isViewFromObject(View view, Object obj) {
return view == obj; }
@Override public void finishUpdate(View arg0) {
}
@Override public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override public Parcelable saveState() {return null;}
@Override public void startUpdate(View arg0) {
}
}
image_view.findViewById(view_name).setBackgroundResource(img_name);
int height=this.getResources().getDrawable(img_name).getMinimumHeight()/2;
int width=this.getResources().getDrawable(img_name).getMinimumWidth()/2;
이부분에서 똑같은 이미지를 각줄마다 불러와서 메모리 부하가 큰거 같습니다. 이 소스 위에 getDrawable(img_name)으로 이미지를 불러와서 객체에 넣어준다음에 작업하시면 1/3로 메모리를 줄일 수 있습니다. 그리고 이미지 크기가 크면 불러오기전에 이미지 크기를 줄인다음에 불러오면 메모리를 아낄 수 있습니다.
크기를 줄여서 불러오는방법 예시입니다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap src = BitmapFactory.decodeFile("/sdcard/image.jpg", options);




기존 리스트처럼 holder패턴을 쓰면 되지 않을까 하는데요.
뷰페이져는 안써봐서 잘 몰르겟지만.
http://croute.me/503 다음 참고하셔서 뷰를 재사용하시면 될꺼 같네요