我有一个应用程序有一个使用 ArrayList<Double>
的服务在后台存储数字很长时间;该变量在服务启动时初始化。
服务在后台,会频繁访问变量(这就是为什么我不想使用文件管理或设置——为了文件 I/O 会非常昂贵电池生命周期)。
变量在其生命周期内可能约为 1MB->2MB。
可以肯定地说变量永远不会被 GC 或系统清零吗,或者有什么办法可以防止这种情况发生吗?
最佳答案
I have an application that has a Service that uses an ArrayList to store numbers in the background for a very long time
如果“很长一段时间”大于“几秒钟,或者只要用户明确要求它运行”,那么我们就有问题了。
简单地说,您的服务不会“存活很长时间”。用户会用task killer把它杀掉,或者用户会用设置应用杀掉它,或者Android会因为年龄过大而把它杀掉。太多的开发者正在泄露服务,导致设备性能下降。
除了短时间(例如,下载大文件时)或应用户请求(例如,音乐播放器)外,真正需要运行的服务很少。
Is it safe to say that the variable will never be nulled by GC or the system, or is there any way to prevent it?
只要进程存在,它就会存在。该过程将一直存在,直到您停止服务(假设没有其他组件在运行),或者直到用户重新启动他们的手机,或者直到发生前面概述的任何场景(例如,任务 killer )。
关于Android 静态变量作用域和生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5305994/