0

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

我做了什么:

  • MainActivity: 设置一个AlarmManager(with setRepeating) 以 AlarmService每 X 分钟执行一次。
  • AlarmService:启用移动数据或 Wifi,然后在 Y 分钟内设置一个新AlarmManager的呼叫DisableMD
  • DisableMD:禁用移动数据或 Wifi

MainActivity是一个活动,AlarmService并且DisableMD是服务。

我的问题:

  1. 在这种情况下,服务是最好的方式吗?服务在后台运行,我不需要它。我只需要AlarmManager调用一个将执行一次操作的类(打开/关闭移动数据)。
  2. 使用 setRepeating会AlarmManager每次还是只创建一次新服务?
  3. 我需要用上次执行的时间AlarmService来更新 a TextViewin并在. 实现 Messenger 真的很令人困惑,这也是我在这种情况下不想要服务的原因之一。MainActivityAlarmServiceMainActivity

各位,你们能回答我的问题和/或告诉我要在我的应用程序的“架构”中进行哪些更改吗?谢谢

4

1 回答 1

1
  1. 您实际上确实需要在后台运行代码(只是不连续)。你是对的,aService可能不是绝对必要的。如果您的操作非常快,您可能会将其放入BroadcastReceiver. 这个其他 SO 线程也可能有帮助。但是,如果您的工作需要花费大量时间,那么 aService可能是您的最佳选择。
  2. 通常,当您调用Serviceby Intent 时,Service如果它从最后一次仍然存在,则会重新使用它。您需要阅读Service. 生命周期信息在这里可能特别相关。
  3. 您实际上并不需要您AlarmService与您MainActivity的 UI 进行交互。似乎您想要的是MainActivity设置您是在处理 WiFi 还是移动数据,让它显示最后一次执行时间,AlarmService设置最后一次执行时间,并让它读取您是否在处理 WiFi 或移动数据。本质上,您有两个要从MainActivity和读取和写入的设置AlarmService。考虑简单地将这些存储在SharedPreferences. 您可以避免直接在您MainActivityAlarmService这种方式之间进行通信的需要。
于 2013-04-16T19:01:30.363 回答