Android服务占用大量内存

用户名

我的应用程序的工作方式如下:Launcher活动在前台启动服务,该服务监视剪贴板更改并在每次复制特定类型的字符串时启动Launcher活动。我是Java编程的新手,我尝试过使用应用程序中的所有最佳实践(使用辅助线程并防止UI线程打)),到目前为止,一切都很顺利。问题是RAM消耗,在重新启动应用程序后(启动服务后),该应用程序报告android运行进程中有24M内存消耗。这是错误行为所在:

-adb shell命令和内存监视器内存监控Android Studio中报告别的东西-如此做adb shell dumpsys meminfo mypackage双方的指令截图已附加运行过程

这些行为对我来说是不可理解的。50M是很多RAM。同样,每当服务启动启动器活动时,该应用程序消耗的内存就会比已使用的内存多100万。谁能帮我调试一下吗?谢谢

gr

该问题很可能是Android如何处理在同一应用程序进程中运行的服务和活动的结果:

只要一个(启动的)服务在流程中运行,整个流程的“内存优先级”就会提高到仅在运行(后台)活动的其他流程之上。

However, since Activities are never recycled by Android even under memory pressure (contrary to some statements in the official docs), this effectively keeps your Activity alive much longer than necessary. This is essentially a shortcoming of Android's process model.

If your memory usage drops to a few megabytes after you force-kill your application process (and Android subsequently relaunches your Service), or if the memory usage is different depending on whether you leave your activity by pressing the home or back button, this confirms that you are facing this problem.

如果您真的依赖于您的服务在后台连续运行,并且希望最大程度地减少内存使用量,则可以尝试将其移到自己的进程中(在该进程中将永远不会加载占用大量内存的UI资源,例如“活动视图”)。

当然,这也会增加开销。仅按原样保持实现可能会更好。Android仍然会在内存压力下终止您的进程,并且稍后会重新启动您的服务(但不会重新启动您的活动),这将最大程度地减少您的内存使用量,而无需任何干预。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章