android - 与服务交互的简单方法?

标签 android android-service android-contentprovider

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

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

对于服务,您必须绑定(bind)它们,等待建立连接,然后如果不想泄漏内存,请确保解除绑定(bind)。更糟糕的是,你必须处理 AIDL用于远程服务。

以这个例子为例:

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

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

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

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

谢谢,

最佳答案

我建议的两种方法...

首先是尝试使用 ResultReceiver它实现了 Parcelable

基本上创建您自己的扩展 ResultReceiver 的类,然后在您传入 Intent 上调用 putExtra(String name, Parceable value >startService(Intent intent) 从您的 ActivityService 然后可以使用 send(int resultCode, Bundle resultData) ResultReceiver 发送回数据。如果 ResultReceiver 是您的 Activity 的内部类,它将能够与其 UI 交互。

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

关于android - 与服务交互的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035228/

相关文章:

android - 已弃用的 "managedQuery"的适当替代品是什么?

android - 如何在 BottomNavigationView 中设置指标?

Android:屏幕锁定时服务停止,为什么?

android - 服务可以访问 Activity 中的变量吗?

Android:跟踪有问题的设备

android - getCropAndSetWallpaperIntent() 内容 Uri 错误

java - android fromhtml 无法识别所有 HTML 标签

android - 如何使用改造从所有响应中获取 header

java - IllegalArgumentException 尝试使用 @style/Widget.MaterialComponents.TextInputLayout.OutlinedBox 时

android - 屏幕旋转后 Activity 和 Intent 服务通信中断