为什么Android会在singleTask或singleInstance上启动多个实例?

时间:2015-02-22 14:31:27

标签: android android-activity launchmode

我想要实现的目标:

应该重用MainActivity,换句话说,我不想再次运行onCreate(),而只是在同一个Activity上运行onResume(),但我有一个奇怪的行为。 似乎AndroidManifest中的launchMode被忽略了。无论我设置什么(singleTasksingleInstance),它总会创建一个新的活动,从而导致堆积增长。当我使用主页按钮退出应用程序并再次启动时,每次创建新实例时。 (观察到.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()被执行了,但是我创建了多少实例(直接通过应用程序启动):

Leak Report

有趣的是onDestroy()完全执行,因为我从不打电话给finish()而且我仍有很多资源。因此Android不需要杀死Activity,但最重要的是上层问题。也许是因为我在finish()的MainActivity中按onPause()删除了所有片段。否则碎片会泄漏。片段的onDestroy()调用super.onDestroy(),这可能是MainActivity。

1 个答案:

答案 0 :(得分:1)

我能够找出问题所在。由于包含我的AdMob实现的片段而发生多个实例。它没有&#34; Android&#34;问题。片段以某种方式泄漏。上面的代码似乎是正确的。