ContentProvider或服务?

时间:2012-12-12 15:31:59

标签: android android-service android-contentprovider

我正在编写一个显示“日本传统时间”(简称JTT)的应用程序。有几个组件(通知,小部件,应用程序本身,警报)都使用相同的数据 - 当前的JTT。

我当前的版本使用单个服务执行所有计算,并使用处理程序通知每个人“滴答”,模仿ACTION_TIME_TICK

然而,有了警报,我还需要一种方法将“通常时间”转换为JTT,反之亦然。计算非常耗费CPU(它全部基于日出和日落),因此我更喜欢将它们全部放在一个地方然后进行缓存(计算知道日出和日落时间的东西并不那么重)。

所以我现在有几种方法可以做到这一点:

  • 保持全部服务
    • 并使用绑定来请求我需要的数据。它实际上已经在一个案例中完成,看起来有点麻烦,因为我必须处理异步响应
  • 转到内容提供商
    • 使用内容观察者代替广播
    • 或发送来自提供商的广播
  • 两种方式相结合
    • 使用内容提供商计算服务数据,然后在需要时广播它

哪个更好?也许别的什么?

2 个答案:

答案 0 :(得分:0)

内容提供商用于结构化数据,因此它并不适合您的用例。不确定'异步响应'是什么意思?调用远程服务通常就像本地函数调用一样,它会在完成后阻塞并返回一个值。如果您必须通知多个组件,则可以使用广播。如果所有组件都在同一进程中(请查看Android支持库源),请使用LocalBroadcast进行探索,或者设置权限以确保其他应用无法获取,如果您需要发送系统级(常规)组件。

答案 1 :(得分:0)

我坚持“只是服务” - 我发现Sticky Broadcasts实际上涵盖了我对普通广播的问题(在注册之后但在获得第一个“tick”之前必须从服务请求最新数据)并且离开我需要实际服务连接的情况少得多。