0

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

总结问题 - myonCreate()在活动处于暂停状态时被调用。根据我见过的所有生命周期流程图——这永远不会发生。

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

   <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()被调用 - 为什么会发生这种情况?

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

希望有人可以阐明这一点。

谢谢,

4

2 回答 2

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 方法中。如果你能把它们贴出来,我们可以看看。

于 2012-12-18T15:49:27.803 回答
0

大概您的活动读取 XML?

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

这是该设置的文档launchMode

于 2012-12-18T15:54:22.910 回答