安卓-应用程序的onCreate()方法';s android.app.Application子类不总是被调用?

安卓-应用程序的onCreate()方法';s android.app.Application子类不总是被调用?,android,android-lifecycle,Android,Android Lifecycle,我最近看到了一个关于Android生命周期常见误解的演示,演示者声称,如果备份管理器正在运行,注册的android.app.Application子类的onCreate()方法可能永远不会被调用,而只会使用基类,这可以通过检查ContextWrapper#getApplicationContext()的返回值来确认 我在任何地方都找不到关于这个的任何文档,而且我以前从未遇到过这个问题。然而,演示者似乎声称这不是一个bug,他说这种行为“有点文档化,但非常隐蔽” 我真的很想知道这是不是真的,因为我

我最近看到了一个关于Android生命周期常见误解的演示,演示者声称,如果备份管理器正在运行,注册的
android.app.Application
子类的
onCreate()
方法可能永远不会被调用,而只会使用基类,这可以通过检查
ContextWrapper#getApplicationContext()
的返回值来确认

我在任何地方都找不到关于这个的任何文档,而且我以前从未遇到过这个问题。然而,演示者似乎声称这不是一个bug,他说这种行为“有点文档化,但非常隐蔽”


我真的很想知道这是不是真的,因为我工作的应用程序在很大程度上依赖于其注册的
android.app.application
子类,我预计这种行为会导致严重的问题。我可以依赖我的应用程序注册的
android.app.Application
子类的
onCreate()
方法在启动所有其他android组件之前始终运行吗?

我遇到过的唯一一种从未调用onCreate()的方法是:

  • 该活动是已初始化的后台服务或接收器
  • 该活动已离开前台,但仍在最近/内存中。例如,活动跳到onPause(),然后跳到onResume()
  • 这来自Android开发人员文档:

    从备份还原调用的应用程序。如果应用程序已在当前备份数据集中存储数据,则将从该数据集中还原数据;如果当前备份数据集没有匹配数据,则将从上次完整设备设置操作期间使用的数据集中还原数据。如果任一源中都不存在此应用程序的备份数据,则返回非零值

    如果此方法返回零(表示成功),则操作系统将尝试从远程传输检索备份的数据集,实例化应用程序的备份代理,并将数据集传递给代理的onRestore()方法


    对我来说,应用程序可以在不重新初始化活动的情况下恢复其数据集是毫无意义的。忽略onCreate()或多或少是毫无意义的。活动将始终遵循其生命周期,我从未遇到过它不遵循生命周期的任何时候。如果当时正在进行备份或恢复,那么这可能是有意义的。我想唯一的方法就是测试它。

    我遇到的唯一一种永远不会调用onCreate()的方法是:

  • 该活动是已初始化的后台服务或接收器
  • 该活动已离开前台,但仍在最近/内存中。例如,活动跳到onPause(),然后跳到onResume()
  • 这来自Android开发人员文档:

    从备份还原调用的应用程序。如果应用程序已在当前备份数据集中存储数据,则将从该数据集中还原数据;如果当前备份数据集没有匹配数据,则将从上次完整设备设置操作期间使用的数据集中还原数据。如果任一源中都不存在此应用程序的备份数据,则返回非零值

    如果此方法返回零(表示成功),则操作系统将尝试从远程传输检索备份的数据集,实例化应用程序的备份代理,并将数据集传递给代理的onRestore()方法


    对我来说,应用程序可以在不重新初始化活动的情况下恢复其数据集是毫无意义的。忽略onCreate()或多或少是毫无意义的。活动将始终遵循其生命周期,我从未遇到过它不遵循生命周期的任何时候。如果当时正在进行备份或恢复,那么这可能是有意义的。我想唯一的办法就是测试它。

    关键是“在我所有其他Android组件启动之前”。除了
    备份代理
    ,我不希望在进行备份时运行您的任何代码。我有关于这个场景的传言,我对Andrew有一定的信心,所以他可能是对的。关键是“在我所有其他Android组件启动之前”。除了
    备份代理
    ,我不希望在进行备份时运行您的任何代码。我有关于这个场景的谣言,我对安德鲁有相当的信心,所以他可能是对的。OP不是问
    活动。onCreate()
    ,他是问
    应用程序。onCreate()
    。OP不是问
    活动。onCreate()
    ,他是问
    应用程序。onCreate()