更多活动生命周期混乱

时间:2012-12-18 15:41:31

标签: android android-activity android-lifecycle

我的活动遇到了这个奇怪的问题。我确信在某处记录了这个原因,但到目前为止我的搜索努力都是徒劳的。

总结问题 - 在活动处于暂停状态时调用我的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例外。

希望有人可以对此有所了解。

谢谢,

路易斯

2 个答案:

答案 0 :(得分:0)

按[主页]按钮不会破坏活动。它将保留在内存中,直到用户返回,或者操作系统需要内存。

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

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方法中。如果你可以发布它们,我们可以采取一个雄鹅。

答案 1 :(得分:0)

据推测,您的活动会读取XML?

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

launchMode设置为the docs