Android 静态变量作用域和生命周期

标签 android memory-management scope instance-variables power-management

我有一个应用程序有一个使用 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/

相关文章:

c++ - 试图让匿名变量在 C++ 中保持事件状态

android - 如何在 libgdx 的舞台上绘制位图字体?

java - Java 中 Thread 中的 WeakReference

JSF 静态 Bean 变量范围

javascript - 提升没有声明为 'var' 的 JS 变量

android,UI drawable和内存消耗之间的关系

android - YouTube视频上传显示某些用户 “Required parameter: part”错误

android - 改变一个 Activity

android - 多个dex文件-转换为dalvik格式失败

c++ - 像这样使用 delete[] 会导致内存泄漏吗?