Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主进程死亡后静态变量仍然有效?_Android_Broadcastreceiver_Sleep_Alarmmanager - Fatal编程技术网

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

Android 主进程死亡后静态变量仍然有效?,android,broadcastreceiver,sleep,alarmmanager,Android,Broadcastreceiver,Sleep,Alarmmanager,我有一个android定期服务在后台运行,前面没有任何活动。AlamManager(RTC_WAKEUP)使用WakeLocks每15分钟调用一次该服务,以执行一些网络操作,持续数秒,然后该服务终止。每次调用该服务时,它都使用一个静态变量来存储PendingEvent对象。顺便说一句:我知道共享引用或使用持久布局,这不是我的问题 我真正的问题是:我的静态变量怎么可能仍然有效?即使我在15分钟不活动的同时(真正的设备睡眠,这有什么关系吗?)我的静态变量看起来还是有效的。我想,如果主UI线程和/或另

我有一个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
事件将保持不变。