2012-12-18 203 views
0

我遇到了这个奇怪的问题与我的活动。我相信为什么会有这种记录,但我的搜索努力迄今为止都是徒劳的。更多活动生命周期混淆

总结这个问题 - 我的onCreate()在活动处于暂停状态时被调用。根据我所见的所有生命周期流程图 - 这绝不应该发生。

这里是(我认为)从我的清单中的相关信息:

<activity 
     android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:mimeType="text/xml" /> 
      <data android:mimeType="application/xml" /> 
      <data android:pathPattern=".*\\.xml" /> 
     </intent-filter> 
    </activity> 

比方说,我通过点击图标来启动通常的方式我的应用程序。然后我点击主页按钮。我可以看到操作系统调用onPause() - 但不是onDestroy() - 这是我所期望的。

如果此时我找到一个xml文件并使用我的应用程序打开它,我看到onCreate()被调用 - 为什么会发生这种情况?

我可能甚至不会注意到,如果不是因为我的onCreate()将一个相当大的内存缓存初始化为一个片段,并且对于此后续启动,findFragmentByTag将返回null,即使应用程序存在于恢复状态已经创建了这个,我最终以OutOfMemory例外。

希望有人能够对此发表看法。

感谢,

+0

http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods-for –

回答

0

按home键[通常]不破坏活动。它将一直保留在内存中,直到用户返回,或者操作系统需要内存。

onCreate被称为您的活动创建供使用,通常是第一次。但是,当设备切换方向时,活动将被销毁并重新创建。这就是为什么onSaveInstanceState和onRestoreInstanceState存在的原因。创作与onStart或onResume不同。 OnStart更能说明第一次开始的活动。 OnResume告诉活动它现在是重点活动(最重要的)。

If at this point I find an xml file and use my application to open it I see onCreate() being called - why does this happen? 我不确定这是什么意思?你如何使用XML文件“看”onCreate?

至于你的问题的其余部分,我有一种感觉,它驻留在你的onCreate,onStart或onPause方法。如果你可以发布他们,我们可以采取一个甘德。

+0

他的活动读取XML。 – dmon

+0

正如你所看到的,我创建了一个意图过滤器,将我的应用程序显示为“选项”来打开一个xml文件(例如,当你在浏览器中下载一个文件时)。我遇到的问题是,当我这样做时 - 我的活动的旧实例仍在运行,但未使用。 – Lieuwe

+0

@Lieuwe如果是这样的话,那么我认为你只是将数据(从意图中接收)分配给onCreate中的活动。我应该在onResume中完成。 – AedonEtLIRA

0

推测您的活动读取XML?

如果是这样,那么每当您打开一个XML时就会创建一个全新的活动。您可以强制系统只有一个活动实例,但这意味着无论用户在看什么都将消失。

这是the docs对于那launchMode设置。

+0

我现在已将android:launchMode =“singleTop”添加到清单。起初,这似乎解决了我所看到的问题。当我现在在我的浏览器中下载一个xml文件,然后点击它,它会发送一个新的意图到我现有的活动。但是,当我使用Gmail应用程序,我点击一个XML附件似乎完全忽略这个设置,它仍然开始一个新的活动。 – Lieuwe