안녕하십니까 . 결론적으로 바로 말씀 드리겠습니다.

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;

  }

  ..............


}