Можно ли прервать finish()

У меня есть действие, работающее в режиме SingleTask (Android 2.2), которое получает намерения от других действий или служб. Моя активность помещает каждое полученное намерение в очередь и что-то с ним делает. По завершении, если не осталось намерений для обработки (т. е. очередь пуста), он вызывает finish().

Проблема заключается в том, что он получает намерение сразу после вызова finish(): вызываются методы onNewIntent и onResume, но моя активность затем уничтожается (onPause/onDestroy) Android, и намерение не обрабатывается.

Я знаю, что это довольно непослушный сценарий, но меня интересует такое поведение... поэтому вопрос: возможно ли прервать Finish() и/или возобновить действие после вызова Finish()?

Спасибо!


person rippeltippel    schedule 15.09.2011    source источник


Ответы (2)


Похоже, вы пытаетесь воссоздать IntentService.

person Falmarri    schedule 15.09.2011

при вызове finish() вызывается метод onDestroy(), и ваша активность прекращается :)

это действие может быть запущено снова по какому-то намерению, но oncreate будет вызываться не onNewIntent

Важное примечание: намерение не может быть получено между оператором finish() и методом onDrestroy!

поэтому, если завершение вызывается, то каждое новое намерение для вашей деятельности будет вызывать вызов onCreate()

так что не беспокойся

вы не должны пытаться прервать завершение, что невозможно, потому что это атомарная операция. Но вам нужно пересмотреть свою логику и улучшить методы oncreate и onNewIntent, чтобы изящно обрабатывать ваш сценарий.

person Lukap    schedule 15.09.2011
comment
› намерение не может быть получено между оператором finish() и методом onDrestroy. Это неверно: finish() запускает вызов ActivityManagerNative.getDefault().finishActivity(), который асинхронно вызывает onPause и onDestroy, и намерения действительно могут быть получил между этими двумя способами, по крайней мере, на Android 2.2 (это моя ситуация). Как я уже писал, после вызова finish() я вижу, что выполняется onNewIntent(), а затем onResume(). Затем onPause() и onDestroy() вызываются ActivityManagerNative. - person rippeltippel; 16.09.2011