我正在寻找在服务和2个不同客户端(应用程序和小部件)之间共享数据的最佳方法。目前,我的应用程序开始在后台每15秒左右下载大量数据的线程,将它们填充到对象图中,然后主应用程序在可配置的时间间隔内使用该对象图。这适用于主应用程序,但对于我想要开发的小部件来说还不够,因为对象图将不在进程中(并且该方法有点混乱IMO)。
所以我希望将数据检索部分提取到服务中(或者如果有更好的建议,那么其他的东西)。我的问题是,将从此服务收到的数据与客户进行通信的最佳方式是什么?或者你不会使用服务而是使用别的东西吗?
由于客户端的开销,我希望服务在数据准备就绪时通知客户端,而不是客户端连续轮询服务.....如果可能的话......当然。
我已经看过播放意图(app和widget都会收到),但我想我必须序列化整个对象图,然后在客户端中对它进行充气才能做到这一点。那是对的吗?我担心能够完成重新膨胀客户端的速度。
有没有更好的方法将数据发送回客户端?如果有可能而且没有序列化,我宁愿运送对象...但如果这是最好的方法,那么我会这样做。
非常感谢任何帮助!
答案 0 :(得分:1)
我想我必须序列化整个对象图,然后在客户端中对其进行充气才能做到这一点
在Intent
个附加内容上传递大量数据并序列化/反序列化它确实不是一个好方法。
由于客户端的开销,我希望服务在数据准备就绪时通知客户端,而不是客户端连续轮询服务
由于负责管理窗口小部件的类扩展了AppWidgetProvider,它会自动扩展BroadcastReceiver
,所以只要你不知道就可以直接向它发送一些广播。
有没有更好的方法将数据发送回客户端?
正确的方法是向客户端发送广播,指示新数据可用,但不会在意图上传递数据本身。相反 - 当负责网络的线程响应解析它时,可以将数据存储在SQLite数据库中(有或没有ContentProvider
)(可能是从您的描述中的服务启动的)。然后它发送所有客户端将接收的广播并从数据库中获取数据。
我强烈建议您查看this video,解释如何实现REST服务器客户端和数据消耗最佳方法。
目前我的应用程序启动了一个在后台每15秒左右下载大量数据的线程
这根本不是一个好主意。您的用户的电池很快就会死亡,当用户意识到您的应用耗尽电量并消耗所有3G / 4G带宽时,您会得到非常糟糕的评价。
而不是拉,你应该使用GCM technology。主要的想法是,当新数据可用时通知的责任从客户端传递到服务器端,并且您不必总是检查是否有更新。