2011-09-15 4 views
1

다른 활동이나 서비스의 의도를 수신하는 SingleTask 모드 (Android 2.2)로 실행중인 활동이 있습니다. 내 활동은 수신 된 각 의도를 대기열에 넣고 그와 함께 처리합니다. 완료시 처리 할 의도가 남아 있지 않으면 (즉, 대기열이 비어 있음) finish()를 호출합니다.finish()를 인터럽트 할 수 있습니까?

문제는 finish()가 호출 된 직후 인 텐트를받는 경우입니다. onNewIntent 및 onResume 메서드가 호출되었지만 내 활동이 Android에 의해 파괴 (onPause/onDestroy)되어 인 텐트가 처리되지 않습니다.

나는 이것이 아주 나쁜 시나리오라는 것을 알고 있지만, 이런 종류의 행동에 관심이 있습니다 ... 그래서 질문입니다 : finish()를 중단하거나 finish() 후에 activity를 다시 시작하는 것이 가능합니까? 님께 전화하셨습니까?

감사합니다.

답변

1

그것은 당신이하려는 것처럼 소리들의 OnDestroy() 메소드가 호출) (완료 호출에 IntentService

0

를 다시 작성하고 활동보다 죽은 :

이 활동이 될 수 있습니다 어떤 의도로 다시 시작되었지만 oncreate는 onNewent가 아닌 것으로 호출됩니다.

중요 사항은 finish() 문과 onDrestroy 메서드 사이에서 의도를 수신 할 수 없다는 것입니다. 마무리는 당신의 활동에 대한 모든 새로운 의도는없는 마무리를 방해하려고해서는 안 그래서 당신은

을 걱정하지 않는

에서 onCreate()를 호출됩니다를 호출 해 그렇다면

가능한 원인은 원자 작업입니다. 하지만 논리를 검토하고 oncreate 및 onNewIntent 메서드를 개선하여 시나리오를 정상적으로 처리해야합니다.

+1

> finish() 문과 onDrestroy 메서드간에 의도를 수신 할 수 없습니다. 올바르지 않습니다. : finish()는에 대한 호출을 트리거합니다. ActivityManagerNative.getDefault(). finishActivity(), onPause와 onDestroy를 비동기 적으로 호출하고 적어도 두 가지 메소드간에 인 텐트를 수신 할 수 있습니다. 적어도 Android 2.2에서는 내 상황입니다. 필자가 작성한 것처럼 finish()를 호출 한 후 onNewIntent()가 실행되고 onResume()이 이어지는 것을 확인합니다. 그런 다음 onPause() 및 onDestroy()가 ActivityManagerNative에 의해 호출됩니다. – rippeltippel