앱에 총 네개의 탭이 잇는데
메모리문제로 계속 터져서
원래는 xml 백그라운드를 사진으로 지정햇엇는데
비트맵을 이용해 배경을 채우는 코드를 구현햇습니다.
탭이 옮겨지면 recycle을 하기위해 온포즈에 놧는데..
근데 Recycle하는데서 계속 오류가 나네요..
제가 코드를 잘못짠거 같은데 한번 봐주십시오...
public class SettingActivity extends Activity {
View LoadPage;
Drawable draw;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settingactivity);
LoadPage = findViewById(R.id.settingLinear);
Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.setting);
Drawable draw=new BitmapDrawable(bitmap);
LoadPage.setBackgroundDrawable(draw);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
recycleBitmap(draw);
super.onPause();
}
public void recycleBitmap(Drawable dra) {
Log.d("Setting","recycleBitmap in");
LoadPage.setBackgroundDrawable(null);
Bitmap bit=((BitmapDrawable)dra).getBitmap(); //< ==요기서 터지네요..
bit.recycle();
dra.setCallback(null);
}
}
네네 감사합니다!
일단 튕기지는 않네요 ㅋㅋ
public class SettingActivity extends Activity {
View LoadPage;
Drawable draw;
Bitmap bitmap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settingactivity);
LoadPage = findViewById(R.id.settingLinear);
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.setting);
draw = new BitmapDrawable(bitmap);
LoadPage.setBackgroundDrawable(draw);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
bitmap.recycle();
draw.setCallback(null);
LoadPage.setBackgroundDrawable(null);
super.onPause();
}
}
이렇게 바꿧습니다....
감사합니다!!!
튕기지않는것만이라도 다행이지만.....
원래 xml 백그라운드를 지정햇을때보다
매번 사진을 불러왓다 recycle 햇다가 해서 그런지
웬지 좀 느리네요...
그건 어쩔수 없는건가요?
Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.setting)
이 부분이요.
bitmap을 전역변수로 설정하시고
recycleBitmap 부분에서 bitmap.recycle();
로 바꾸시면 되지 않을까요.
Drawable 객체를 생성해서 BitmapDrawable을 해보질 않아서 다른 건 모르겠습니다.
Drawable에 있는 Bitmap을 가져와 Bitmap bit로 만든 후 recycle 하는거면
기존 onCreate에 정의 된 Bitmap은 recycle시키지 않는게 아닌가요...?
아니면 Drawable객체 생성 후 바로 bitmap을 recycle하셔도 될듯 합니다만...