gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:47 25 4
gpt4 key购买 nike

我想要实现的目标:

MainActivity 应该被重用,换句话说,我不想再次运行 onCreate(),而只是在同一个 Activity 上运行 onResume(),但我有一个奇怪的行为。似乎忽略了 AndroidManifest 中的 launchMode。无论我设置什么(singleTasksingleInstance),它总是会创建一个导致堆不断增长的新 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(直接app start):

Leak Report

同样有趣的是 onDestroy() 被执行了,因为我从来没有调用过 finish() 而且我还有很多资源。所以Android没必要把Activity干掉,但是上面的问题一开始比较重要。可能是因为我在 MainActivity 的 onPause() 中通过 finish() 杀死了所有 fragment 。否则 fragment 会泄漏。 fragment 的 onDestroy() 调用 super.onDestroy(),这可能是 MainActivity。

最佳答案

我能够隔离问题。多个实例的发生是由于包含我的 AdMob 实现的 fragment 。这不是“Android”的问题。该 fragment 不知何故泄漏。上面的代码似乎是正确的。

关于android - 为什么Android会在singleTask或singleInstance上启动多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com