2013-04-16 50 views
0

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

我做了什么:

  • MainActivity:设置AlarmManager(与setRepeating)的执行 AlarmService每个X分钟。
  • AlarmService:启用移动数据或无线上网 然后设置一个新的AlarmManager调用DisableMD沿Y分钟
  • DisableMD:停用移动数据或无线上网

MainActivity是一种活动和AlarmServiceDisableMD是服务。

我的问题:

  1. 是一种服务在这种情况下,最好的方法是什么?服务在后台运行,我不需要它。我只需要AlarmManager来调用一次会执行一次操作的类(打开/关闭移动数据)。
  2. 请问AlarmManager用setrepeating每次创建一个新的Service还是只有一次?
  3. 我需要AlarmService更新MainActivity一个TextView与去年执行的时间和AlarmService得到的MainActivity复选框(true或false)的值。实现一个Messenger非常混乱,这就是我不想在这种情况下使用服务的原因之一。

所以,大家好,能否回答我的问题和/或告诉我应该在我的应用“架构”中更改哪些内容? 感谢

+0

在编程中,很少有*最好的**做**任何事情**的方法,而是一个*最快*或最*痛苦*的方式。找到最适合您的方案的最适合的方案。 –

+0

你的问题是问什么解决这个问题的“最好方法”是什么,这可能导致许多人把这个问题作为“不具有建设性”来解决,因为它使问题变得主观。不过,我认为你的问题有几点需要足够具体的答案。你可能想重新提出你的问题以避免关闭。我认为这里有一个合理的问题。 – kabuko

+0

无论如何,我想打开/关闭移动数据将是一个快速的行动。我更喜欢最痛苦的方式。 – ruda

回答

1
  1. 真的需要在好像(只是不连续)后台运行的代码。你是对的,但Service可能不是必要的。如果您的操作非常快,您可以将其放入BroadcastReceiverThis其他SO线程也可能有所帮助。如果您的工作需要大量时间,则Service可能是您的最佳选择。
  2. 一般而言,如果您打算通过意向致电Service,那么如果上一次还活着,那么将重新使用相同的Service。你需要阅读docs for Service。生命周期信息在这里可能特别相关。
  3. 实际上您并不需要AlarmService与您的MainActivity的用户界面进行交互。看起来你想要的是为你的MainActivity设置你是在处理WiFi还是移动数据,为了显示上一次执行的时间,AlarmService设置上一次执行的时间,以及它是否读取正在处理WiFi或移动数据。基本上,您有两个设置,您想要从MainActivityAlarmService中读取和写入。考虑简单地将这些存储在SharedPreferences中。您可以避免以这种方式在MainActivityAlarmService之间直接通信。
+0

你的BroadcastReceiver仍然会在主线程中运行,所以要么立即卸载到后台线程,要么使用IntentService。 – orip

相关问题