下载数据和更新UI

时间:2014-05-13 16:34:14

标签: android android-service

在下载数据和通知Android的用户界面过程中,有几件事情让我烦恼。我正在使用(IntentService来下载数据,这些数据足够好。

我不知道如何处理通知UI虽然已经检索到数据。经过Downloading data using IntentService - Lifecycle ChangesWhich is the best way to communicate between service and activity?的一些研究和讨论后,我到达了一个我不确定使用哪种方法的地方。

我正在寻找的替代方案是:

  1. 服务+ LocalBroadcasts +数据库
    • Activity会启动Service
    • Service会将数据下载到数据库中
    • Service会发送Broadcast并附上'完成'通知
    • Activity会选择此Broadcast并使用AsyncTask
    • 从数据库中检索数据
    • Activity每次向用户显示AsyncTask时都会使用onResume检索数据(Activity,因为用户导航时错过了广播距离)。
  2. 服务+ ResultReceivers +数据库
    • Service会启动Service
    • Service会将数据下载到数据库中
    • ResultReceiver会通知Activity已完成
    • AsyncTask将使用ResultReceiver
    • 从数据库中检索数据
    • 而不是每次都检索数据,Activity会在生命周期更改中重复使用,并且通知不会丢失。
  3. 服务+ ResultReceivers + Bundle
    • Service会启动Service
    • Service会下载数据(可选择下载到数据库中)
    • ResultReceiver会通知Bundle它已完成,并以Activity提供数据。
    • Bundle会从AsyncTask检索数据(需要ResultReceiver)。
    • 而不是每次都检索数据,Broadcast会在生命周期更改中重复使用,并且通知不会丢失。
  4. 选项 1 2 要求用户等待数据库读/写操作。选项 3 因此更快,但我看到许多来源建议使用ResultReceiverResultReceiver来传输数据(我是不确定为什么虽然)。

    目前,我坚持选择 3 ,但我不确定这是否真的是一种正确的方法,如果我错过了什么。

    有人可以对此有所了解吗?


    虽然有些人(可能是正义的)将这个问题投票为基于意见的,但我正在寻找可能会忽视的陷阱。此外,我正在寻找答案为什么建议使用Broadcast或{{1}}来发送结果数据。

1 个答案:

答案 0 :(得分:0)

小心地使用某种DataManager单例实例,由数据库备份似乎是一个强大的解决方案。使用ResultReceiver,UI会收到通知并从DataManager中提取数据。

我还发现使用ResultReceiverBroadcast来发送数据会对性能产生负面影响,因为对象需要序列化。这是一项代价高昂的操作,因此可能会引发GC。