【问题标题】:onCreate called when back from background从后台返回时调用 onCreate
【发布时间】:2014-06-04 14:57:15
【问题描述】:

Android 文档指出关于 onCreate 方法:

在首次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供了一个包含活动先前冻结状态的 Bundle(如果有的话)。 始终跟在 onStart() 之后。

但是我有一个奇怪的行为:

  • 我有一个 Activity A。当我启动我的应用程序时,会调用 onCreate。这很正常。
  • 然后我按下主页按钮。 onStop 被调用。这很正常。
  • 我回到我的应用程序,onCreate 没有被调用。这很正常。
  • 我又按回家了。
  • 我转到另一个应用程序(dropbox、gmail 或其他)来访问一个文件,该文件的扩展名与我的应用程序相关联(我有一个带有指向此文件扩展名的 pathPattern 的意图过滤器)
  • 我选择此文件以在我的应用程序中打开它。尽管从未调用过 onDestroy,但调用了 onCreate。这是为什么 ?如果我在我的 Activity 中设置一个布尔值来检查这是否是我第一次调用 onCreate,这个布尔值会显示两次 true(第一次,第二次是在使用文件扩展名打开应用程序时)。

我想我对 onCreate 有误解。但是医生对我没有帮助。有什么想法吗?

【问题讨论】:

    标签: android android-activity oncreate


    【解决方案1】:

    这很可能是您的活动的不同实例。共享意图可能是在其他应用程序(例如保管箱)堆栈上启动您的活动。使用两个单独的 onCreate 运行您的活动类的两个实例

    您可以通过按设备上的多任务按钮来检查是否有两次应用程序屏幕截图预览:一次使用您自己的应用程序图标,另一次使用其他应用程序(例如保管箱)应用程序图标。

    【讨论】:

    • 我刚刚检查过,但使用多任务按钮时,我只看到我的应用程序的一个实例。
    • 和 logcat 显示相同的 pid,所以似乎只有一个实例。
    • @Vincent 活动的不同实例,而不是应用程序。你不会在任务管理器中看到它。使用 DDMS 进行检查。
    • @Simon 是的,你是对的。使用此方法 (stackoverflow.com/a/10618496/575481) 似乎我有多个活动实例。我猜Dropbox开始了一个新的。我怎样才能避免这种情况!?
    • 很高兴知道我可以提供帮助。您可能可以通过在清单中使用一些标志来避免它,例如 singleInstance、task afinity 等。我曾经发现过这个很棒的 PDF(不要问我在哪里,我在 Google 上搜索过它,或者 G+),它对堆栈有非常好的提示: drive.google.com/file/d/0B4UthPrlbfJPNG9PUGpWR1JyRDg/…
    【解决方案2】:

    这两种情况下的活动有不同的意图。 当从其他应用程序启动时,您实际上是在其他任务(回栈)中, 活动的默认android:launchMode 是每个任务的新实例。

    见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多