与服务交互的简单方法?

时间:2012-12-26 01:41:51

标签: android android-service android-contentprovider

是否有一些与服务交互的方式与内容提供商一样简单?

我的意思是,例如,对于内容提供商,我们有getContentResolver():如果您有Context,则可以轻松查询数据。您甚至不必担心跨进程调用的详细信息(ContentProvider)。

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

举个例子:

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

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

但是在下载过程中,我希望获得一些信息(平均速度,完成百分比......)。问题出在这里:内容提供商更容易与之沟通。您只需要一个上下文并查询所需的信息。如果是服务,您需要绑定它,取消绑定它,或构建您自己的AIDL(如果它是远程服务)...

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

谢谢,

1 个答案:

答案 0 :(得分:4)

我建议采取两种方式......

首先尝试使用实现Parcelable的{​​{3}}。

基本上创建一个扩展ResultReceiver的自己的类,然后在putExtra(String name, Parceable value上通过IntentstartService(Intent intent)调用Activity。然后,Service可以使用send(int resultCode, Bundle resultData)上的ResultReceiver来发送数据。如果ResultReceiver是您Activity的内部类,则它将能够与其UI进行交互。

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