티스토리 뷰

android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@44e93fc0 is not valid; is your activity running?

 

대충 이런 오류.

 

이게 왜 뜨냐 하면, 현재 띄울려고 하는 메세지 (AlertDialog나 Toast 같은 context(this)가 필요한)가 생성될 위치를 잘못 잡아서 생기는 오류입니다.

 

상식적으로 생각하면 보통 자기 자신에서 띄울때는 아무런 문제가 없는데,

 

만약 Activity 구조가 AcrivityGroup으로 이루어져 있어서 하위 Activity에서 이런 메세지를 호출할 대 오류가 발생합니다.

 

이 오류를 해결하기 위해서는 ActivityGroup의 가장 상위 Activity에게 이 메세지들을 생성하게 해야합니다.

 

보통 getParent() 하면 된다고 하는데, 전 이 방법을 사용 할 수 없어서 꼼수를 썼습니다.

 

가장 상위 Activity에서 public static Context context;를 선언합니다. 여기서 static으로 선언해줘야 다른 Activity에서 전역으로 접근 할 수 있습니다.

 

그런 다음 onCreate안에 context = this;를 해줘서 context에 가장 최상위 Activity의 context를 등록해 줍니다.

 

그런 다음 하위 activity에서 최상위Activity.context를 기준으로 해서 메세지를 호출하면

 

정상적으로 메세지가 생성이 됩니다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크