主进程死后静态变量仍然有效?

时间:2012-07-03 19:26:07

标签: android broadcastreceiver sleep alarmmanager

我有一个在后台运行的android定期服务,没有Activity在它前面运行。 AlamManager(RTC_WAKEUP)使用WakeLocks每隔15分钟调用一次服务,以执行一些网络操作,然后它就会死掉。该服务每次调用时都使用一个存储PendingIntent对象的静态变量。顺便说一句:我知道SharedPreferences或使用持久布局,这不是我的问题。

我真正的问题是:我的静态变量仍然有效吗?即使我在15分钟不活动的同时(真正的设备睡眠,无论如何都重要吗?)我的静态变量似乎毕竟是有效的。我想并且读过,如果没有在主UI-Thread和/或其他工作线程中运行的Activity或Service,整个过程就会消失,静态vaules也会被删除。

如果以及为什么android让我的进程仍然挂着arround,保留所有静态变量。它与我的预定AlamManager事件有关。我dareay android让我的进程内存有效!?

2 个答案:

答案 0 :(得分:2)

  

我的静态变量怎么可能仍然有效?

Android没有终止警报之间的过程。

  

我想,如果没有在主UI-Thread和/或其他工作线程中运行的Activity或Service,整个过程就会消失,静态vaules也会被删除。

Android可以随时终止您的流程。没有正在运行的组件(活动或服务)会增加Android在终止其他进程之前终止进程的几率。但是,如果Android不需要RAM,它将使您的进程独立。

但是,由于您不知道每次发生AlarmManager事件时您的流程是否存在,您需要处理需要初始化静态数据成员的情况。

答案 1 :(得分:0)

由于您使用的是静态变量,因此垃圾收集器不会清除它们,直到具有它们的类的类加载器也被清除。 在“当且仅当垃圾收集器可以回收其定义的类加载器时,可以卸载类或接口”,请参阅http://docs.oracle.com/javase/specs/jls/se5.0/html/execution.html#12.7以获取更多详细信息