onCreate() 在 Activity 停止(但未销毁)时调用。仅在安装后

Kaj*_*una 4 android oncreate android-lifecycle onpause

我正在开发一个针对 Api 19 的应用程序,它基本上是一个处理草图。

我面临的问题是我的应用程序第一次运行时,在安装后,它运行良好,直到用户将其发送到后台。然后,如果他们再次单击应用程序图标,则调用 onCreate() 但活动不会被销毁或重新启动。一些变量会发生变化,从而产生奇怪的行为。

这仅在第一次使用该应用程序时发生。强制关闭它后,这种行为不会再发生(据我测试)。从 Eclipse 启动应用程序时也不会发生这种情况。

总而言之,这是第一次强制关闭后发生的情况(我认为是正确的):

  • 活动正在运行。

  • 活动通过主页按钮返回

  • 暂停()

  • 我们再次点击应用程序图标

  • onResume()

这就是 - 仅 - 安装后第一次运行应用程序时发生的情况:

  • 活动正在运行。

  • 活动通过主页按钮返回

  • 暂停()

  • 我们再次点击应用程序图标

  • onCreate() <-- !! 注意没有 onDestroy()

  • onResume()

我想知道我使用沉浸式模式是否与此有关,但是将 Api 目标版本更改为 10、删除沉浸式模式或在旧设备上进行测试都无济于事。当然,我在清单上使用了android:configChanges="orientation|keyboardHidden|screenSize"

有没有人知道可能导致这种情况的原因?这是一个常见问题还是我应该在我的代码中查找错误?也许是处理错误?

提前感谢您提供任何线索。我希望这是询问这个问题的正确方式。这是我的第一篇文章。

更新: 我的解释不是很准确,但显然有一个错误报告。这个问题在这里解释得更好:https : //code.google.com/p/android/issues/detail?id=26658

不幸的是,我无法使建议的解决方案起作用,在 onCreate() 中使用它会导致我的应用程序关闭或崩溃:

if (!isTaskRoot()) {
  finish();
  return;
} 
Run Code Online (Sandbox Code Playgroud)

Kaj*_*una 5

好的,这就是我解决它的方法,以防其他人撞到这堵墙。

这可能会特别影响来自处理开发环境的人员,因为它将“处理草图”转换为项目的唯一活动。

原始问题(Android 在从包安装程序启动应用程序时以不同的 -wrong?- 方式管理应用程序)在这里得到了很好的解释:https : //code.google.com/p/android/issues/detail ?id=26658

发布在那里的解决方案可能会解决大多数情况,但是如果 - 像我一样 - 您的启动器活动是执行所有工作的启动器活动,您将需要创建一个特定的启动器活动来启动主要活动......并在发生Android错误。

将此位添加到启动器活动的 onCreate() 方法中:

if (!isTaskRoot()) {
 finish();
 return;
} 
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。