안녕하십니까 . 결론적으로 바로 말씀 드리겠습니다.
Compass를 구현했는대 Out of Memory 가 납니다.
재현 현상은 바로 에러가 나는게 아니고 Screen on/off를 5~20분 동안 걔속 하다보면 OOM이 납니다.
로그를 보면 Bitmap 쪽에서 에러가 났는대요.
그래서 onPause에 recycle()도 시켜줬는대도 , 에러가 납니다.
구글링을 해본 결과 Context 에 관한 참조를 오랫동안 유지하지 말아라.라고 나와 있는걸 봤는대
OOM을 이 로직에서 어떻게 처리해야 될지 답문 부탁드립니다.
Class CompassView {
Context mContext ;
Bitmap compass ;
// 생성자
public CompassView (Context context){
mContext = context;
compass = BitmapFactory.decodeResource( mContext .getResources(), R.drawable.compass);
}
.........
public void clearCompassView(){
compass .recycle();
}
Class B{
Context mContext ;
CompassView mCompassView = null;
LinearLayout mCompass_Layout = null;
//생성자
public B(Context context){
mCompassView = new CompassView(mContext);
mCompass_Layout = (LinearLayout) findViewById(R.id.compass_lin);
mCompass_Layout.addView(mCompassView);
}
............
public void onPause()
{
if(mCompassView != null){
mCompassView.clearCompassView();
}
if(mCompass_Layout != null){
mCompass_Layout.removeAllViews();
mCompass_Layout.removeCallbacks(null);
}
mCompass_Layout = null;
}
..............
}