活动,Asynctasks和服务之间的数据交换

时间:2016-11-28 19:42:48

标签: android android-asynctask android-service

关于下面提到的问题,我已经谈到了我是否需要决定是否:

  • 启动一个具有AlarmManager的服务,然后每10分钟启动一次查询。只有当用户将“Onn-Off”开关设置为“Off”时,才会停止此服务。
  • 使用AlarmManager每10分钟启动一次IntentService。此服务将仅在需要时启动并在之后关闭

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

谢谢!

原始问题:

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

在尝试开发我的第一个应用程序创意时,我已经开始尝试接收和解析来自互联网的数据。到目前为止,我所获得的是生成一个通过API接收JSON数据并解析此JSON的查询。所有这些都是在AsyncTask中完成的。然后,屏幕上会显示收到的数据。

但是,出于我的app想法的目的,我需要在后台完成此操作。我想到的是:

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

现在棘手的部分开始了: 我收到的数据(假设每10分钟一次)将用于更改闹钟。因此,举一个简单的例子,假设用户可以将闹钟设置为早上08:00。然后应用程序每隔10分钟检查当前温度,如果温度低于0°C,则将闹钟时间更改为07:45,因为用户必须提前醒来以清除汽车上的冰。 此外,当“唤醒”应用程序时,当前(或最近收到的)温度应显示在UI中。

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

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:0)

使用AlarmManager根据需要频繁启动IntentService(在您的示例中,应该在用户计划起床前两小时开始检查温度就足够了小时,最后在正常唤醒时间前半小时。更常见的情况是在极端天气条件下。

没有必要在凌晨03:33准确检查温度,所以请使用 setInexactRepeating(),这对电池来说会更容易。

另见Scheduling Repeating Alarms

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