어플 개발중인데


현재 상황은 탭액티비티에서 5개의 탭이 있습니다.


여기서 3개의 탭에 모두 viewpager를 사용해서 2개,4개,5개의 이미지를 보여주고 있습니다. 나머지 탭은 그냥 단일 이미지고요


그런데 몇번 왔다갔다하다보면 out of memory로 죽어버리네요...


그래서 이런저런 방법을 찾아보고 있는데 일반적으론 onDestroy에서 메모리 해제하는 방법은 있는데


탭액티비티에서나 viewpager에서 메모리 누수를 방지하는 방법은 찾을 수가 없네요 ㅠㅠ


어떻게 해야할지..... 이미지 해상도도 낮춰봤지만 나중에가면 끝내 죽더라구요


아래에 소스코드 탭 하나만 첨부하겠습니다. 나머지는 다 똑같고 보여주는 이미지 갯수만 차이납니다.


package com.ajou.worldtogether.connection;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.ajou.worldtogether.R;
public class Child extends Activity implements ViewPager.OnPageChangeListener {
	private static final int PAGECOUNT = 2;
	private static final int INITPAGEPOSITION = 0;
	private int prePosition;
	private ViewPager mPager;
	private LinearLayout curPageMarkLayout;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v("Connection", "create");
		setContentView(R.layout.tempnull);
		curPageMarkLayout = (LinearLayout) findViewById(R.id.marker);
		mPager = (ViewPager) findViewById(R.id.pager);
		mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));
		mPager.setOnPageChangeListener(this);
		initPageMark(INITPAGEPOSITION);
}
	public void onPause() {
		super.onPause();
		Log.v("Connection", "pause");
	}
	public void onResume() {
		super.onResume();
		Log.v("Connection", "resume");
	}
	public void onDestroy() {
		super.onDestroy();
	}
	private void initPageMark(int initPosition) {
		for (int i = 0; i < PAGECOUNT; i++) {
			ImageView iv = new ImageView(this);
			iv.setLayoutParams(new LayoutParams(50, 50));
			if (i == initPosition) {
				iv.setBackgroundResource(R.drawable.page_mark_yes_selected);
			} else {
				iv.setBackgroundResource(R.drawable.page_mark_no_selected);
			}
			curPageMarkLayout.addView(iv);
		}
		prePosition = initPosition;
	}
	private class PagerAdapterClass extends PagerAdapter {
		private LayoutInflater mInflater;
		public PagerAdapterClass(Context context) {
			super();
			mInflater = LayoutInflater.from(context);
		}
		public int getCount() {
			return 2;
		}
		public Object instantiateItem(View pager, int position) {
			View v = null;
			if (position == 0) {
				v = mInflater.inflate(R.layout.imagebox, null);
				((ImageView) v.findViewById(R.id.img_box))
						.setImageResource(R.drawable.connection_1_1);
			} else {
				v = mInflater.inflate(R.layout.imagebox, null);
				((ImageView) v.findViewById(R.id.img_box))
						.setImageResource(R.drawable.connection_1_2);
			}
			((ViewPager) pager).addView(v, 0);
			return v;
		}
		public void destroyItem(View pager, int position, Object view) {
			View v = (View) view;
			((ImageView) v.findViewById(R.id.img_box)).setImageDrawable(null);
			((ViewPager) pager).removeView(v);
			v = null;
		}
		public boolean isViewFromObject(View pager, Object obj) {
			return pager == obj;
		}
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}
		public Parcelable saveState() {
			return null;
		}
		public void startUpdate(View arg0) {
		}
		public void finishUpdate(View arg0) {
		}
	}
	public void onPageScrollStateChanged(int position) {
		// TODO Auto-generated method stub
	}
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		// TODO Auto-generated method stub
	}
	public void onPageSelected(int position) {
		// TODO Auto-generated method stub
		curPageMarkLayout.getChildAt(prePosition).setBackgroundResource(
				R.drawable.page_mark_no_selected);
		curPageMarkLayout.getChildAt(position).setBackgroundResource(
				R.drawable.page_mark_yes_selected);
		prePosition = position;
	}
}