在屏幕上取消注册广播接收器以获得更好的电池寿命

时间:2011-03-27 10:41:05

标签: android broadcastreceiver battery

我正在创建一个仅在屏幕打开时才有效的Android小部件,以延长电池寿命。所以我有一个服务,它一直运行并对ACTION_SCREEN_ON和ACTION_SCREEN_OFF作出反应。当屏幕关闭时,我取消注册其他广播接收器,当屏幕打开时,我再次注册它们。

我的问题是,关于电池寿命,屏幕关闭时要做的最佳做法是什么。是否更好地删除广播接收器变量(即m_Receiver = null;)或取消注册?删除意味着更多的系统空闲内存,但导致垃圾收集和额外的内存操作(当屏幕打开时,我必须创建一个新的接收器),这是昂贵的...

1 个答案:

答案 0 :(得分:0)

  

我正在创建一个仅在屏幕打开时才有效的Android小部件,以延长电池寿命。

首先,我假设“小部件”是指“app widget”。

其次,app小部件永远不会“活跃”。

  

所以我有一个服务一直运行并对ACTION_SCREEN_ON和ACTION_SCREEN_OFF作出反应。

这不是一个好主意。首先,通过保持流程来浪费兆字节的RAM。其次,它不会起作用,因为Android不会让服务“一直运行” - 它最终会关闭你的老年服务。第三,用户对像您这样一直运行服务的开发人员感到恼火,因此他们会使用任务杀手(Android 2.1及以下版本)或设置应用程序中的管理服务屏幕(Android 2.0及更高版本)来终止您的服务)。

  

当屏幕关闭时,我取消注册其他广播接收器,当屏幕开启时,我再次注册它们。

我不知道“其他广播接收器”是什么。他们可能不应该首先注册。

  

我的问题是,关于电池寿命,屏幕关闭时要做的最佳做法是什么。是否更好地删除广播接收器变量(即m_Receiver = null;)或取消注册?删除意味着更多的系统空闲内存,但导致垃圾收集和额外的内存操作(当屏幕打开时,我必须创建一个新的接收器),这是昂贵的...

考虑到你在服务中占用了多少内存,担心这一点毫无意义。专注于摆脱永恒的服务。

例如,假设此应用小部件显示电池电量。没有正在观看ACTION_BATTERY_CHANGED的永久服务。相反,让用户选择一个轮询周期(例如,每五分钟一次)并使用AlarmManager定期检查电池电量。