Android 内容提供商还是服务提供商?
我正在写一个显示“日本传统时间”(简称JTT)的应用程序。有几个组件(通知、小部件、应用程序本身、警报)都使用相同的数据-当前JTT 我当前的版本使用一个服务来完成所有的计算,并使用一个处理程序来通知每个人“滴答”,模仿Android 内容提供商还是服务提供商?,android,android-service,android-contentprovider,Android,Android Service,Android Contentprovider,我正在写一个显示“日本传统时间”(简称JTT)的应用程序。有几个组件(通知、小部件、应用程序本身、警报)都使用相同的数据-当前JTT 我当前的版本使用一个服务来完成所有的计算,并使用一个处理程序来通知每个人“滴答”,模仿ACTION\u TIME\u TICK 然而,对于警报,我还需要有一种方法将“正常时间”转换为JTT,反之亦然。这些计算需要相当多的CPU(都是基于日出和日落),因此我更喜欢在一个地方完成,然后缓存(计算知道日出和日落时间的东西没有那么重) 所以我现在有几种方法可以做到这一点:
ACTION\u TIME\u TICK
然而,对于警报,我还需要有一种方法将“正常时间”转换为JTT,反之亦然。这些计算需要相当多的CPU(都是基于日出和日落),因此我更喜欢在一个地方完成,然后缓存(计算知道日出和日落时间的东西没有那么重)
所以我现在有几种方法可以做到这一点:
- 让它继续使用
- 并使用绑定请求我需要的数据。它实际上已经在一个案例中完成了,而且似乎有点麻烦,因为我必须处理异步响应
- 移动到内容提供商
- 使用内容观察者而不是广播
- 或从提供商发送广播
- 兼而有之
- 使用内容提供商计算服务的数据,然后在需要时广播数据
哪一个更好?也许还有别的吗?内容提供程序用于结构化数据,因此它并不真正适合您的用例。不确定“异步响应”是什么意思?调用远程服务通常与本地函数调用类似,完成后将阻塞并返回一个值。如果您必须通知多个组件,则广播是最佳选择。如果所有组件都在同一进程中,请使用LocalBroadcast进行探索(检查Android支持库源代码),或者在需要发送系统范围(常规)的应用程序时,对其设置权限以确保其他应用程序无法获取 我坚持“仅服务”——我发现粘性广播实际上涵盖了我在普通广播中遇到的问题(必须在注册后但在获得第一个“勾号”之前向服务请求最新数据),这使得我需要实际服务连接的情况大大减少 现在我正在使用
Messenger
与服务进行通信,所以要从绑定服务请求数据,我会创建一条消息并发送它,然后在我自己的处理程序中得到响应。但是我会研究同步通信,谢谢你的想法。啊,我明白了。我在考虑一个基于AIDL的服务,您只需在本地存根上调用方法,从而获得同步调用。