2014-07-08 2 views
1

저는 스티키 서비스와 별도의 SINGLE_TOP 활동으로 구성된 애플리케이션을 보유하고 있습니다. 서비스는 서버로부터 메시지를 수신 한 다음 startActivity (인 텐트)를 사용하여 활동을 시작합니다. 모든 메시지가 사용자에 의해 해제되면 finish()를 사용하여 작업을 종료합니다. 나는 그 인상을 받고 있었고 나의 연구에서 그렇게 끝난 후에는 startActivity (intent) 호출이 onNewIntent가 아니라 onCreate를 통해 호출 될 것이라고 생각했다. 그러나 마지막 메시지를 무시한 정확한 시간에 새 메시지를 보내면 드물지만 finish()가 실행 된 후 onDestroy 이전에 onNewIntent가 표시됩니다.finish() 실행 후 onNewIntent가 호출되었습니다.

이 상황을 경험 한 사람이 있습니까? 간단한 해결책이 있습니까?

제가 생각하고있는 해결책은 다음과 같습니다. 1. 서비스가 finish()를 실행하기 전에 중지되었음을 서비스에 알립니다. 2. 서비스에서 OK를 기다립니다. 3. 서비스는 활동이 중지되었음을 알릴 때까지 모든 메시지를 대기열에 넣습니다. 4. onDestroy 활동이 중지 된 서비스를 알립니다. 5. 서비스가 대기열의 메시지를 보냅니다.

finish()가 onCreate를 사용하면 훨씬 간단 해집니다.

입력 해 주셔서 감사합니다.

+0

마무리 사이에 수백 밀리 초 간격() 실행하고 onNewIntent있다. – user3817640

+0

finish()가 실행 된 후 onCreate를 통해 다음 인 텐트가 있어야한다고 귀하의 의견에서 가정합니다. – user3817640

+0

그러면 finish()가 실행되거나 onDestroy가 실행 된 후 Activity가 스택 맨 위에서 언제 제거됩니까? 후자의 경우 그것은 저조한 디자인입니다. – user3817640

답변

0

singleTop에 대해 설명하겠습니다.

활동 A, B 및 C를 고려하십시오. B가 singleTop이고 다른 두 개가 standard이라고 가정합시다. 이것이 스택이 보이는 방법입니다. 차례로

finish()

A -> B -> C -> B -> B -> onNewIntent() called, new Instance of B is NOT created

A -> B -> C -> B -> new Instance of B will be created

onDestroy()이 때문에 경우 모두에서 활동이 스택의 상단에서 제거됩니다 호출합니다.

어쩌면 귀하의 경우이 일어나고있다 : 내 로그에 따르면

A -> B -> C -> finish() -> B -> onNewIntent() called

A -> B -> C -> B -> finish() -> finish() -> B -> onNewIntent() called

관련 문제