2014-02-10 5 views
0

정확히 WP8의 Application_Launching 메서드의 타이밍/스레드는 무엇입니까? 특히, UI 로딩/렌더링 시퀀스와 관련하여?응용 프로그램 시작 타이밍

Application_Launching 내에서 일부 전역 초기화가 수행되는 앱이 있습니다. 시작 페이지의 XAML에서 데이터 바인딩 중에 호출되는 메서드에서 크래시 보고서가 표시됩니다. 충돌은 글로벌 init이 일어나지 않는 것과 일치합니다.

EDIT : Null로 초기화 된 전역 변수의 malloc ated 메모리 블록에 파일을 읽는 원시 (C++) 메서드를 호출합니다. 이 변수는 충돌보고의 일부로 덤프됩니다. null 인 보고서를 받았어.

코드 붙여 넣기는 다소 의미가 없습니다.

+0

현재 수행중인이 글로벌 초기화에 대해 설명해 주시겠습니까? 약간의 코드를 제공해 주시겠습니까 –

답변

1

앱을 시작하면 Launching 이벤트가 발생합니다. 그러나이 응용 프로그램은 나중에 "툼 스톤 (tombstoning)"이라는 프로세스에서 휴면 상태가 될 수 있습니다. 삭제 표시 한 앱을 다시 시작하면 Launching 이벤트가 발생하지만 대신 Activated 이벤트가 발생합니다. 이 사건을 처리하는 것을 잊었을 가능성이 큽니다.

쉽게 테스트하려면 Windows Phone 프로젝트의 등록 정보에서 디버그 탭으로 이동하여 "디버깅 중 비활성화시 삭제 표시"옵션을 선택하십시오. 거기에서 디버거가 부착 된 상태에서 앱이 비활성화 될 때마다 (일반적으로 에뮬레이터의 홈 버튼을 누를 때) 앱이 삭제 표시되며 다시 전환 할 때 앱이 제대로 다시 시작되는지 확인할 수 있습니다.

+0

+1 아마도 OP가 타이밍보다는이 문제에 더 직면 할 것이라는 데 동의합니다. 반면에 이러한 경우는 테스트를 거쳐야합니다. – Romasz

+0

삭제 표시를 사용하면 마지막으로 확인한 전체 상태가 지워지지 않습니다. 이 경우의 "전역"은 고유 하위 시스템의 전역 변수를 의미합니다. –

+0

@SevaAlekseyev 어쨌든 에뮬레이터에서 테스트하는 데 5 분 밖에 걸리지 않습니다. –

0

다른 이론이 있습니다. 라이브러리가 잘못된 시간에로드되는 것이 아니라 라이브러리가 인 경우 인 경우입니다. 거의 모든 내 기본 함수가 정적이고 상태가 전역이므로 활성 원시 객체가없고 COM 하위 시스템의 모듈에 대한 참조 수가 0입니다. COM 규칙에 따라 모듈은 언제든지 언로드 할 수있는 공정한 게임입니다. 후속 원시 함수 호출에서 라이브러리는 다시로드되지만 전역 상태는 사라집니다.

다음 버전부터는 앱의 평생 동안 하나의 실시간 네이티브 개체를 보관할 것입니다. 충돌이 다시 발생하는지 알 수 있습니다.