我有一个活动,在其 onCreate 方法中调用了一个 Init 函数(该函数调用了一些涉及大量内容的本机代码并调用了 openSLES 音频 api)。关键是这个 Init 函数在再次调用时使应用程序崩溃,这发生在屏幕旋转或当我使用后退按钮关闭活动并再次启动它时(但如果同时进程被终止,我没有麻烦)。我无法更改 Init 函数的行为。
我看到当活动被破坏时进程没有被杀死,我在阅读文档后预料到了这一点,这是一件好事,因为 - 如果有一些音频信号正在播放 - 在活动被破坏后继续播放,这是有利于我的目的。
我尝试使用 onSaveInstanceState 检查初始化状态,但这仅适用于屏幕旋转,即调用 onSaveInstanceState 时。当我按下后退按钮时,不会调用回调。
所以我尝试使用共享首选项,在 onPause 中执行状态保存。但此时我遇到了相反的问题:如果进程被终止,共享首选项值将被保留,但在这种情况下,我需要再次执行 Init 以使应用程序正常工作。
我想我需要一种方法来确定我的活动是否是在进程终止后创建的,但目前我不知道如何。我考虑过在 onPause 方法中使用 bundle 实例,但我不知道这如何以及是否可行。任何形式的提示将不胜感激。