我应该在AlarmManager中使用哪种类型?

时间:2013-04-16 18:22:49

标签: java android alarm

我正在构建一个可以这样工作的应用:启用移动数据或Wifi(如果选中复选框,则为WiFi)每隔X分钟为Y分钟,然后禁用它。

我做了什么:

  • MainActivity:设置AlarmManagersetRepeating)来执行 每X分钟AlarmService
  • AlarmService:启用移动数据或Wifi 然后设置新的AlarmManager以在Y分钟内调用DisableMD
  • DisableMD:停用移动数据或Wifi

MainActivity是一项活动,AlarmServiceDisableMD是服务。

我的问题:

  1. 在这种情况下,服务是最好的方式吗?服务在后台运行,我不需要它。我只需要AlarmManager来调用一个将执行一次操作的类(打开/关闭移动数据)。
  2. 使用setRepeating AlarmManager每次或仅一次创建一个新服务吗?
  3. 我需要AlarmService更新TextViewMainActivity的上次执行时间和AlarmService来获取复选框的值(true或false)在MainActivity。实现Messenger实在令人困惑,这也是我在这种情况下不想要服务的原因之一。
  4. 那么伙计们,你能否回答我的问题和/或告诉我在我的应用程序的“架构”中要改变什么? 感谢

1 个答案:

答案 0 :(得分:1)

  1. 实际上需要在后台运行代码(只是不连续)。你是对的,Service可能不是必需的。如果您的操作非常快,则可以将其放入BroadcastReceiverThis其他SO线程也可能有所帮助。如果您的工作花费了大量时间,Service可能是您的最佳选择。
  2. 一般情况下,当您按意图调用Service时,如果上一次仍然有效,则会重复使用相同的Service。您需要阅读docs for Service。生命周期信息在这里可能特别相关。
  3. 您实际上并不需要AlarmService与您的MainActivity用户界面进行互动。您想要的是MainActivity设置您是处理WiFi还是移动数据,以便显示上次执行时间,AlarmService设置最后一次执行并让它读取您是处理WiFi还是移动数据。基本上,您有两个要从MainActivityAlarmService读取和写入的设置。考虑将它们存储在SharedPreferences中。您可以避免以这种方式在MainActivityAlarmService之间直接沟通。