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

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

概述我想要实现的目标: 应该重用MainActivity,换句话说,我不想再次运行onCreate(),而只是在同一个Activity上运行onResume(),但我有一个奇怪的行为. 似乎AndroidManifest中的launchMode被忽略了.无论我设置什么(singleTask,singleInstance),它总是创建一个新的Activity,导致堆增长.当我使用主页按钮退出应用程序并再 我想要实现的目标:

应该重用MainActivity,换句话说,我不想再次运行onCreate(),而只是在同一个Activity上运行onResume(),但我有一个奇怪的行为.
似乎AndroidManifest中的launchMode被忽略了.无论我设置什么(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(),但实际上我创建了很多实例(直接通过应用程序启动):

有趣的是onDestroy()完全执行,因为我从不调用finish()而且我仍然拥有大量资源.因此AndroID不需要杀死Activity,但最重要的是上层问题.也许是因为我在onPause()的MainActivity中使用finish()来杀死所有片段.否则碎片会泄漏.片段的onDestroy()调用super.onDestroy(),它可能是MainActivity.

解决方法 我能够找出问题所在.由于包含我的AdMob实现的片段而发生多个实例.这不是“AndroID”问题.片段以某种方式泄漏.上面的代码似乎是正确的. 总结

以上是内存溢出为你收集整理的为什么Android会在singleTask或singleInstance上启动多个实例?全部内容,希望文章能够帮你解决为什么Android会在singleTask或singleInstance上启动多个实例?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125409.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存