在下载数据和通知Android的用户界面过程中,有几件事情让我烦恼。我正在使用(Intent
)Service
来下载数据,这些数据足够好。
我不知道如何处理通知UI虽然已经检索到数据。经过Downloading data using IntentService - Lifecycle Changes和Which is the best way to communicate between service and activity?的一些研究和讨论后,我到达了一个我不确定使用哪种方法的地方。
我正在寻找的替代方案是:
Activity
会启动Service
Service
会将数据下载到数据库中Service
会发送Broadcast
并附上'完成'通知Activity
会选择此Broadcast
并使用AsyncTask
Activity
每次向用户显示AsyncTask
时都会使用onResume
检索数据(Activity
,因为用户导航时错过了广播距离)。Service
会启动Service
Service
会将数据下载到数据库中ResultReceiver
会通知Activity
已完成AsyncTask
将使用ResultReceiver
Activity
会在生命周期更改中重复使用,并且通知不会丢失。Service
会启动Service
Service
会下载数据(可选择下载到数据库中)ResultReceiver
会通知Bundle
它已完成,并以Activity
提供数据。Bundle
会从AsyncTask
检索数据(需要ResultReceiver
)。Broadcast
会在生命周期更改中重复使用,并且通知不会丢失。选项 1 和 2 要求用户等待数据库读/写操作。选项 3 因此更快,但我看到许多来源建议不使用ResultReceiver
或ResultReceiver
来传输数据(我是不确定为什么虽然)。
目前,我坚持选择 3 ,但我不确定这是否真的是一种正确的方法,如果我错过了什么。
有人可以对此有所了解吗?
虽然有些人(可能是正义的)将这个问题投票为基于意见的,但我正在寻找可能会忽视的陷阱。此外,我正在寻找答案为什么建议使用Broadcast
或{{1}}来发送结果数据。
答案 0 :(得分:0)
小心地使用某种DataManager
单例实例,由数据库备份似乎是一个强大的解决方案。使用ResultReceiver
,UI会收到通知并从DataManager
中提取数据。
我还发现使用ResultReceiver
和Broadcast
来发送数据会对性能产生负面影响,因为对象需要序列化。这是一项代价高昂的操作,因此可能会引发GC。