6

是否有一些方法可以与内容提供商一样简单的服务进行交互?

我的意思是,例如,对于我们拥有的内容提供商getContentResolver():如果您拥有Context. 您甚至不必担心跨进程调用的细节(ContentProvider)。

使用服务,您必须绑定它们,等待建立连接,然后如果您不想泄漏内存,请确保取消绑定它们。更糟糕的是,您必须为远程服务处理AIDL

举个例子:

我有一个文件下载器模块。目前有两种方法:内容提供者或服务。要开始每次新下载,两者都很容易:

  • 服务:startService()。你只需要一个上下文。
  • 内容提供者:getContentResolver()并将新下载插入其队列。您还只需要一个上下文。

但是在下载过程中,我想获取一些信息(平均速度、完成百分比……)。问题就在这里:内容提供者更容易沟通。同样,您只需要一个上下文并查询您想要的信息。如果是服务,则需要绑定、解绑,或者构建自己的 AIDL(如果是远程服务)……</p>

我问这个问题是因为在上面的例子中,服务似乎是内容提供者的正确方法,至少因为它的名字。

谢谢,

4

1 回答 1

4

我建议这样做的两种方法...

首先是尝试使用ResultReceiver实现Parcelable

基本上创建您自己的类,该类扩展然后ResultReceiver调用您从. 然后可以使用将数据发回。如果它是您的内部类,它将能够与其 UI 交互。putExtra(String name, Parceable valueIntentstartService(Intent intent)ActivityServicesend(int resultCode, Bundle resultData)ResultReceiverResultReceiverActivity

第二种可能性是使用Notifications标志FLAG_ONGOING_EVENT。这显然不会出现在其Activity本身中,但会出现在Notification栏中,但您可以RemoteView使用每个更新的通知创建带有进度和更新文本等的自定义。这类似于您在 Google Play 在您的设备上安装或更新应用程序时看到的内容。

于 2012-12-26T02:19:14.113 回答