finish()
我有一个在其中调用的 Android 活动,onStop()
因此当我切换到其他活动(包括主菜单)时,该活动将被关闭。至此,一切都按预期进行。
但是,当我再次运行应用程序时(有时,并非总是如此),我注意到应用程序使用与之前相同的 PID 运行并onCreate()
再次调用。我没有看到任何调用,onRestart()
所以我认为onCreate()
调用是在之后立即执行onStop()
的,这违反了活动生命周期。当应用程序使用新的 PID 时,我可以理解为什么onCreate()
会被调用,那是因为这是活动的开始。
有谁知道为什么会这样?
关于我正在开发的应用程序的一些信息:这是一个 Unity + Vuforia + Android 应用程序。我创建了一个自定义活动,因为我需要在 Android(而不是 Unity)上创建一个原生 UI。
我在 Android 项目中发现了一个类似的问题:http ://code.google.com/p/android/issues/detail?id=15331但我不确定原因是否相同。
更新:从我从日志中看到的,在finish()
调用之后,没有调用onDestroy()
. 但是,如果我提到的问题发生(活动使用相同的流程启动),则在活动开始时会调用 to onDestroy()
。
更新:抱歉更新晚了。在这里,我展示了 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()
after onStart()
。我的活动基本上是 Vuforia/QCAR 活动的子类,它也是 Unity 活动的子类。因此,在 myonDestroy()
中,我调用了超类' ( super.onDestroy()
),并且对我覆盖的其他方法也进行了调用。
如果我查看 Unity 和 Vuforia/QCAR Android 库(我很好奇,所以我对它们进行了反编译——是的,这可能不对),在 Unity 的内部onDestroy()
,Unity 试图杀死它自己的进程(这是应用程序进程)。
Process.killProcess(Process.myPid());
所以,当这种情况发生时,我的应用程序就会再次关闭。onDestroy()
如果第二次运行使用不同的进程,则不会发生这种奇怪的情况。
我也尝试过 noHistory 方法。但是同样的事情仍然发生:(当第二次运行使用相同的进程时,onDestroy()
会出现延迟,然后该进程被 Unity 杀死。