Activity Group window bad token 문제 깊이 분석

전재 가 있 으 면 출처: 시의 모래: http://blog.csdn.net/t12x3456
Activity Group window bad token 문제 깊이 분석
최근 에 다른 사람 을 도와 웹 뷰 페이지 를 디 버 깅 하 는데 이상 하 게 다음 과 같은 문제 가 발생 했 습 니 다.
H5 페이지 에 서 는 주소 에서 전 달 된 인자 가 검출 되 며, 특정 인자 이상 이 감지 되면 Dialog 가 팝 업 되 어 알림 이 표 시 됩 니 다.
Dialog:android.view.WindowManager$BadTokenException:
그러나 단독 테스트 프로젝트 에서 이상 이 발생 하지 않 았 습 니 다. 이 때 로그 에 local activity manager 의 내용 이 포함 되 어 있다 는 것 을 알 게 되 었 습 니 다. 그 러 고 보 니 역시 TabHost 에서 만 이런 상황 이 발생 할 수 있 었 습 니 다.
유사 한 경우, Activity Group 이나 TabActivity 의 하위 Activity 에서 Dialog 를 만 들 려 면 다음 코드 를 사용 하 십시오.
progressDialog = new ProgressDialog(XXX.this)

만 들 면 다음 과 같은 예외 가 나타 납 니 다.
05-24 12:34:42.236: ERROR/AndroidRuntime(6362): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@43e5b158 is not valid; is your activity running?

실제로 이러한 문제 가 발생 한 주요 원인 은 UI 인 터 페 이 스 를 표시 할 때 context 선택 오류 때문이다.
new 대화 상자 에서 인자 content 가 this 로 지정 되 었 기 때문에 현재 하위 Activity 를 가리 키 는 content 입 니 다.그러나 하위 Activity 는 동적 으로 생 성 되 어 계속 존재 할 수 없습니다.아버지 Activity 의 content 는 안정 적 으로 존재 하기 때문에 다음 과 같은 해결 방법 이 있 습 니 다.
Activity Group 에 Activity Group 을 끼 워 넣 으 면 끼 워 넣 은 만큼 getParent () 를 사용 해 야 합 니 다.getParent 를 사용 하 는 이 유 는 Activity Group 의 내부 메커니즘 에서 이해 할 수 있 습 니 다. TabActivity 의 부 류 는 Activity Group 이 고 Activity Group 의 부 류 는 Activity 입 니 다.따라서 Ams 의 측면 에서 볼 때 Activity Group 은 일반적인 Activity 와 별 차이 가 없다. 그 생명 주 기 는 표준 start, stop, resume, destroy 등 을 포함 하고 시스템 에서 하나의 Activity Group 만 허용 한다. 그러나 Activity Group 내부 에 중요 한 구성원 변 화 량 이 있 는데 그 유형 은 LocalActivity Manager 이다. 이런 가장 큰 특징 은 응용 프로 세 스 의 주 류 를 방문 할 수 있다 는 것 이다.Activity Thread 클래스 입 니 다.Ams 가 특정한 Activity 를 시작 하거나 특정한 Activity 를 찬성 하 는 것 은 모두 Activity Thread 류 를 통 해 실 행 된 것 이 고 LocalActivity Manager 류 는 이 를 통 해 서로 다른 Activity 를 불 러 오고 Activity 의 서로 다른 상 태 를 제어 할 수 있다 는 것 을 의미한다.시동 이 아 닌 적재 입 니 다. 중요 합 니 다.시작 이란 프로 세 스 를 만 드 는 것 을 말 합 니 다. (응용 프로그램 이 자주 존재 하지 않 는 다 면) 이 Activity 를 실행 하 는 것 을 말 합 니 다. 불 러 오 는 것 은 이 Activity 를 일반 클래스 로 불 러 오고 이 클래스 의 대상 을 만 드 는 것 을 말 합 니 다. 이 함수 가 실행 되 지 않 았 습 니 다.Activity 대상 을 불 러 오 는 과정 은 AmS 에 서 는 전혀 보이 지 않 습 니 다. 끼 워 넣 은 Activity 는 자신 이 포함 하고 있 는 Window 창 에 만 기 여 했 을 뿐 입 니 다.서브 액 티 비 티 의 다른 상 태 는 movetoState 를 통 해 처리 된다.따라서 하위 Activity 는 일반적인 Activity 처럼 Window 만 제공 하 는 것 이 아니 므 로 Dialog 를 만 들 때 getParent 를 사용 하여 Activity Group 의 진정한 Activity 를 가 져 와 야 Dialog 를 추가 하여 Activity 에 가입 할 수 있 습 니 다.
비슷 한 window bak token 의 이상 이 발생 하면 우 리 는 이 방면 에서 분석 하여 해결 할 수 있다.

좋은 웹페이지 즐겨찾기