onCreate() после finish() в onStop()

У меня есть активность Android, которая вызывает finish()внутри нее onStop(), поэтому, когда я переключаюсь на другие действия (включая главное меню), действие будет закрыто. До этого момента все работает так, как ожидалось.

Однако, когда я снова запускаю приложение (иногда, не всегда), я замечаю, что приложение работает с тем же PID, что и предыдущее, и снова вызывает onCreate(). Я не видел никакого вызова onRestart(), поэтому я предполагаю, что вызов onCreate()выполняется сразу после onStop(), что нарушает жизненный цикл активности. Когда приложение использует новый PID, я могу понять, почему вызывается onCreate(), потому что это начало активности.

Кто-нибудь знает, почему это происходит?

Немного о приложении, которое я разрабатываю: это приложение Unity + Vuforia + Android. Я создаю пользовательскую активность, потому что мне нужно создать собственный пользовательский интерфейс на Android (а не на Unity).

Я обнаружил аналогичную проблему в проекте Android: http://code.google.com/p/android/issues/detail?id=15331, но я не уверен, что причина то же самое или нет.

update: Из того, что я вижу в журнале, после вызова finish()нет вызова onDestroy().Однако, если возникает проблема, о которой я упоминал (активность запускается с использованием того же процесса), в начале активности вызывается onDestroy().

update: Извините за позднее обновление. Здесь я показываю отрывок из logcat.

## First run

I/ActivityManager(  265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=the.app/the.app.UnityAriusActivity bnds=[238,115][351,273] } from pid 423
I/ActivityManager(  265): Start proc the.app for activity the.app/the.app.UnityAriusActivity: pid=1686 uid=10013 gids={3003, 1006, 1015}
D/arius   ( 1686): UnityAriusActivity: onStart
D/arius   ( 1686): UnityAriusActivity: onResume

## Home button is pressed

I/ActivityManager(  265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.sonyericsson.home/.HomeActivity } from pid 265
D/arius   ( 1686): UnityAriusActivity: onPause
D/arius   ( 1686): UnityAriusActivity: onStop

## Second run

I/ActivityManager(  265): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=the.app/the.app.UnityAriusActivity bnds=[238,115][351,273] } from pid 423

## Same process, onStart is called again

D/arius   ( 1686): UnityAriusActivity: onStart
D/arius   ( 1686): UnityAriusActivity: onResume
I/ActivityManager(  265): Displayed the.app/the.app.UnityAriusActivity: +500ms
D/Unity   ( 1686): Creating OpenGL ES 2.0 context (RGB16 565 16/0)
W/IInputConnectionWrapper(  423): showStatusIcon on inactive InputConnection
I/QCAR    ( 1686): onSurfaceCreated

## Strangely, there's an onDestroy here

D/arius   ( 1686): UnityAriusActivity: onDestroy

## Unity apparently kills the process from its onDestroy

I/Process ( 1686): Sending signal. PID: 1686 SIG: 9
I/ActivityManager(  265): Process the.app (pid 1686) has died.

Проблема в том, что во втором запуске есть onDestroy()после onStart(). Моя активность в основном является подклассом активности Vuforia/QCAR, которая также является подклассом активности Unity. Итак, внутри моего onDestroy()я вызываю суперкласс ( super.onDestroy()), а также то же самое для других методов, которые я переопределяю.

Если я посмотрел на Android-библиотеку Unity и Vuforia/QCAR (мне было любопытно, поэтому я их декомпилировал — да, это может быть неправильно), внутри Unity onDestroy()Unity пытается убить свою собственный процесс (который является процессом приложения).

Process.killProcess(Process.myPid());

Итак, когда это происходит, мое приложение снова закрывается. Если второй запуск использует другой процесс, этого странного onDestroy()не происходит.

Я также попробовал метод noHistory. Но то же самое все еще происходит :( Когда второй запуск использует тот же процесс, появится поздний onDestroy(), а затем процесс будет уничтожен Unity.

11
задан fajran 28 June 2012 в 08:54
поделиться