2016-11-28 36 views
2

至于下面我来点表示有问题的,我需要做出是否决定:数据交换

  • 启动服务一旦有AlarmManager内,然后每10分钟启动一次查询。只有当用户将“Onn-Off”开关设置为“Off”时,该服务才会停止。
  • 使用AlarmManager每10分钟启动一次IntentService。该服务将在需要的时候然后才可以启动并随后关闭

以下哪种方式比较好,当谈到: - 能够交换由服务(或Intenservice)与其他活动接收到的数据/服务 - 电池使用情况 - 整体“良好的编码习惯”?

谢谢!

原题:

我是一个非常新的Android开发者和所遇到的,我不知道如何解决的情况。我已经花了几天的时间寻找解决方案,但找不到一个解决方案。

在试图开发我的第一个应用程序的想法时,我开始玩弄从互联网接收和解析数据。我到目前为止所取得的成就是生成一个查询,通过API接收JSON数据并解析这个JSON。所有这些都是在AsyncTask中完成的。接收到的数据然后显示在屏幕上。

但是,对于我的应用程序的想法,我需要在后台完成此操作。我想到的是:

  • 开始一个几乎与我的Asynctask具有相同逻辑的服务。由AlarmManager管理,该服务然后在特定的时间间隔内请求,接收和解析数据。

现在棘手的部分开始: 我收到的数据(比方说,每10分钟)将用于更改闹钟。所以,作为一个简单的例子,假设用户可以在早上将他的闹钟设置为08:00。然后,应用程序每10分钟检查一次当前温度,如果温度低于0摄氏度,则将闹钟时间更改为07:45,因为用户必须提早起床以清除车内的冰块。此外,当“唤醒”应用程序时,应在UI中显示当前(或更确切地说,最新收到的)温度。

什么是最好的方法来实现这一目标?我有一些关于从AsyncTasks/Services向/从活动传递/接收数据的问题。

我的第一种方法是从MainActivity启动一个服务,将一些数据传递给服务(例如警报开始的初始时间和用户的当前位置)。该服务然后有两个单独的AlarmManagers。其中一个设置为执行实际的警报(在早上唤醒用户),另一个管理从互联网获取数据的时间间隔。

我的问题: - 到目前为止,我的思路是否有意义? - 向服务传递数据和从服务接收数据的最佳方式是什么?我最好的猜测是使用意图传递和广播接收器从服务接收数据。这在这个特定的情况下会有意义吗?

我担心如果不经过你自己的努力就不会发布问题。尽管我没有添加任何实际的源代码,但我希望您能看到我已经处理了这些问题很长一段时间,但在我知道应用程序的结构之前无法真正开始编码。

在此先感谢

回答

0

使用AlarmManager必要(在你的例子来启动IntentService的时候,它应该足以开始检查两小时左右的温度,用户一个接一个计划前起床,也许再这是没有必要检查温度正好在上午03点33分小时,最后在之前正常的唤醒时间半小时。更多的时候只有在极端的天气条件下。

所以使用 setInexactRepeating(),这将是更容易电池。

参见Scheduling Repeating Alarms

结果写入SharedPreferences和有正常的唤醒时间前一个IntentService检查15分钟如果用户应该起床权即可。在这种情况下取​​消正常的唤醒警报。通过SharedPreferences(想到一个邮箱)和本地(!)广播进行通信是一个好主意 - 便宜且安全:)