4

我想要达到的目标:

MainActivity 应该被重用,换句话说,我不想onCreate()再次运行,但只能onResume()在同一个 Activity 上,但我有一个奇怪的行为。似乎launchModeAndroidManifest 中的 被忽略了。无论我设置什么 ( 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。

4

1 回答 1

1

我能够隔离问题。多个实例是由于包含我的 AdMob 实现的片段而发生的。这不是“Android”问题。片段以某种方式泄漏。上面的代码似乎是正确的。

于 2015-02-24T18:57:26.603 回答