我想要达到的目标:
MainActivity 应该被重用,换句话说,我不想onCreate()
再次运行,但只能onResume()
在同一个 Activity 上,但我有一个奇怪的行为。似乎launchMode
AndroidManifest 中的 被忽略了。无论我设置什么 ( singleTask
, singleInstance
),它总是会创建一个导致堆增长的新 Activity。当我使用主页按钮退出应用程序并重新启动它时,每次都会创建一个新实例。(在 .hprof 泄漏报告中观察到这一点)。
这是它的外观:
<activity
android:name="com.mydomain.myapp.pro.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="nosensor" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
当我试图隔离问题时,我看到 Activity 将在按下 home 时被杀死(onDestroy()
被执行),但泄漏报告显示了这一点。每次启动应用程序时,我都会获得越来越多的 MainActivity 实例,尽管最后一个实例被认为已被销毁。怎么可能onDestroy()
被执行了,但是我启动 Activity 的实例有多少(直接通过应用启动):
执行起来也很有趣onDestroy()
,因为我从不打电话finish()
,而且我还有很多资源。所以Android没有必要杀掉Activity,但是上层问题一开始更重要。也许是因为我finish()
在 MainActivity 的 on 中杀死了所有片段onPause()
。否则碎片会泄漏。片段的onDestroy()
调用super.onDestroy()
可能是 MainActivity。