getLocalActivityManager()내의 AlertDialog() 사용시의 유의점!!


getLocalActivityManager() 사용시 AlertDialog()를 사용하게 되면 아래와 같은 에러메세지가 발생하는 경우가 있다.

android.view.WindowManager$BadTokenException: Unable to add window --


token android.app.LocalActivityManager$LocalActivityRecord@43b976f8
is not valid; is your activity running?



샘플코드를 살펴보자.
아래는 보통의 다이얼로그를 띄워줄때의 방식이다.

  AlertDialog.Builder alert_internet_status = new AlertDialog.Builder(getParent());

    alert_internet_status.setTitle( "Warning" );            
    alert_internet_status.setMessage( msg );
    alert_internet_status.setPositiveButton( "close", new DialogInterface.OnClickListener() {
     public void onClick( DialogInterface dialog, int which) {
      dialog.dismiss();   //닫기
     }
    });
    alert_internet_status.show();        
}


보통은 붉게 표시한 부분에 'this' 또는 '클래스명.this'를 사용할텐데, ActivityGroup 사용시에는 다른 Activity에서 사용되는 Intent와는 달리 다소 복잡한 부분이 있으며 주체가 누구냐에 따라 달라지므로 유의해야 한다.


출처 : http://www.androes.com/71