Android 主进程死亡后静态变量仍然有效?
我有一个android定期服务在后台运行,前面没有任何活动。AlamManager(RTC_WAKEUP)使用WakeLocks每15分钟调用一次该服务,以执行一些网络操作,持续数秒,然后该服务终止。每次调用该服务时,它都使用一个静态变量来存储PendingEvent对象。顺便说一句:我知道共享引用或使用持久布局,这不是我的问题 我真正的问题是:我的静态变量怎么可能仍然有效?即使我在15分钟不活动的同时(真正的设备睡眠,这有什么关系吗?)我的静态变量看起来还是有效的。我想,如果主UI线程和/或另一个工作线程中没有运行任何活动或服务,那么整个进程都会死亡,静态变量也会被擦除Android 主进程死亡后静态变量仍然有效?,android,broadcastreceiver,sleep,alarmmanager,Android,Broadcastreceiver,Sleep,Alarmmanager,我有一个android定期服务在后台运行,前面没有任何活动。AlamManager(RTC_WAKEUP)使用WakeLocks每15分钟调用一次该服务,以执行一些网络操作,持续数秒,然后该服务终止。每次调用该服务时,它都使用一个静态变量来存储PendingEvent对象。顺便说一句:我知道共享引用或使用持久布局,这不是我的问题 我真正的问题是:我的静态变量怎么可能仍然有效?即使我在15分钟不活动的同时(真正的设备睡眠,这有什么关系吗?)我的静态变量看起来还是有效的。我想,如果主UI线程和/或另
如果以及为什么android让我的进程仍然悬空,保留所有静态变量。它是否与计划的AlamManager事件相关。我敢说android让我的进程内存保持有效 由于您使用的是静态变量,垃圾收集器将不会清除它们,直到拥有它们的类的类加载器也被清除。 在“当且仅当垃圾收集器可以回收其定义类装入器时,才可以卸载类或接口”中,请参阅以了解更多详细信息 我的静态变量怎么可能仍然有效 Android没有在警报之间终止您的进程 我想,如果主UI线程和/或另一个工作线程中没有运行任何活动或服务,那么整个进程都会死亡,静态变量也会被擦除 Android可以随时终止您的进程。没有运行的组件(活动或服务)增加了Android在终止其他进程之前终止您的进程的可能性。然而,如果Android不需要RAM,它将让您的进程独立
但是,由于您不知道每次发生
AlarmManager
事件时,您的进程是否会出现,因此您需要处理静态数据成员需要初始化的情况。如果内存充足,Android为什么不保留您的进程?人越多越有意思Android中的进程生命周期是一个实现细节(阅读:不可预测)。但是如果我的进程被Android杀死,AlarmManager是否也应该被杀死?如果是的话,那么计划的暂停时间呢?因为到目前为止我所知道的是,如果程序任务被终止(例如,通过用户请求),AlarmManager也会被终止。@AndreasBolm:用户单击“设置”中的“强制停止”将取消您的警报计划。当Android终止您的进程,为其他应用程序释放内存时,情况并非如此。在这种情况下,计划的AlarmManager
事件将保持不变。