我正在构建一个应用程序,它将以这种方式工作:启用移动数据或Wifi (Wifi,如果复选框被选中)每X分钟Y分钟(s),然后禁用它。
我做了什么:
-
MainActivity
:设置一个AlarmManager
(带setRepeating
)执行AlarmService
每隔X分钟。 -
AlarmService
:启用移动数据或Wifi然后设置一个新的AlarmManager
在Y分钟内调用DisableMD
-
DisableMD
:禁用移动数据或Wifi
MainActivity
为活动,AlarmService
和DisableMD
为服务。
我的问题:
- 在这种情况下,服务是最好的方法吗?服务在后台运行,我不需要它。我只需要
- 我需要
AlarmService
在MainActivity
中更新TextView
与最后执行的时间,AlarmService
在MainActivity
中获取复选框的值(true或false)。实现一个信使是非常令人困惑的,这也是我不想在这种情况下使用服务的原因之一。
AlarmManager
调用一个类,它将执行一个动作一次(打开/关闭移动数据)。AlarmManager
是每次都创建一个新的服务还是只创建一次?所以,伙计们,你能回答我的问题和/或告诉我在我的应用程序的"架构"要改变什么?由于
- 你做实际上需要在后台运行代码,似乎(只是不连续)。你是对的,
Service
可能不是严格必要的。如果您的操作非常快,您可以将其放入BroadcastReceiver
中。这个其他SO线程也可能有所帮助。如果你的工作需要大量的时间,Service
可能是你最好的选择。 - 一般来说,当你调用
Service
的意图,相同的Service
将被重用,如果它仍然活着从上次。您需要阅读Service
的文档。生命周期信息在这里可能特别相关。 - 你实际上不需要你的
AlarmService
与MainActivity
的UI交互。看起来你想要的是你的MainActivity
设置你是在处理WiFi还是移动数据,让它显示最后一次执行时间,让AlarmService
设置最后一次执行时间,让它读取你是在处理WiFi还是移动数据。从本质上讲,您有两个要从MainActivity
和AlarmService
读取和写入的设置。考虑简单地将这些存储在SharedPreferences
中。这样可以避免在MainActivity
和AlarmService
之间直接通信。