gpt4 book ai didi

java - Android服务占用大量内存

转载 作者:可可西里 更新时间:2023-10-31 22:04:49 24 4
gpt4 key购买 nike

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

- adb shell command and Memory Monitor Android Studio 中的内存监视器报告其他内容 - adb shell dumpsys meminfo mypackage 命令也是如此两者的截图已附上Running Processes

这些行为对我来说是无法理解的。 50M 是很大的 RAM。此外,每当服务启动 Launcher Activity 时,应用程序消耗的内存比它已经使用的内存多 1M。谁能帮我调试这个?谢谢

最佳答案

问题可能是 Android 如何处理服务和在同一应用程序进程中运行的 Activity :

只要有一个(启动的)Service在进程中运行,“内存整个过程的优先级” is elevated 高于其他进程仅运行(后台) Activity 。

但是,由于 Activity are never recycled Android 即使在内存压力下(与 some statements在官方文档中),这有效地使您的 Activity 存活的时间比必要的时间长得多。这本质上是一个 shortcoming of Android's process model .

如果在您强制终止您的应用程序进程(并且 Android 随后重新启动您的服务)后您的内存使用量下降到几兆字节,或者如果内存使用量因您是否通过按主页或后退按钮离开 Activity 而有所不同, 这证实您正面临此问题。

如果你真的依赖你的服务在后台持续运行并希望最小化内存使用,你可以尝试将它移动到它自己的进程(其中永远不会加载内存密集型 UI 资源,如 Activity 中的 View )。

当然,这也增加了开销;保持实现原样可能会更好。 Android 仍会在内存压力下终止您的进程,稍后会重新启动您的服务(但不是您的 Activity ),这将在没有任何干预的情况下最大限度地减少您的内存使用。

关于java - Android服务占用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241556/

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