gpt4 book ai didi

Android Activity 由于堆 fragment 导致服务崩溃

转载 作者:行者123 更新时间:2023-11-29 14:01:10 25 4
gpt4 key购买 nike

我有一个 Android 应用程序( Activity ),它也有相应的服务。该服务由 Activity 启动,并且即使在 Activity 停止时也应该持续运行。当 Activity 再次启动时,它可以绑定(bind)到服务并查询它。

有时 Activity 会被操作系统销毁和创建。这不应该影响事情, Activity 应该只是重新创建并且能够再次绑定(bind)到服务。这基本上有效。

然而...

我发现 Dalvik VM 堆和 native 堆都是非压缩的,因此会不断增加大小,直到 Activity 用完内存并崩溃(即使总内存使用量实际上是恒定的并且没有泄漏)。由于在创建过程中完成了大量分配,因此销毁和重新创建 Activity 会加剧这种情况。

这几乎可以保证 Activity 在多次重启后会崩溃。这并没有太困扰我,但随后发生的是该服务也崩溃了,因为它是同一应用程序的一部分。该服务包含一些重要数据,这些数据随后会在崩溃期间丢失。

我对解决此问题的任何建议感兴趣吗?

有没有办法将服务与 Activity 分开(这样当 Activity 崩溃时它不会同时使服务崩溃),但仍将服务和 Activity 放在同一个应用程序中?

我可以保留服务数据,但这需要对数据库进行多次访问并且不利于节省电量。

最佳答案

听起来您的服务正在维护对已失效 Activity 的引用。您应该使用启动服务,而不是绑定(bind)服务。请参阅关于 Services 的指南主题有关差异以及如何使用每个差异的详细信息。

如果你想使用一个绑定(bind)服务(也就是说,你确实因为某些原因需要使用bindService()),那么一定要调用unbindService()在你的 Activity 结束之前。请注意,当最后一个 Activity 解除绑定(bind)时,服务将停止。

关于Android Activity 由于堆 fragment 导致服务崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9458131/

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