是否有一些与服务交互的方式与内容提供商一样简单?
我的意思是,例如,对于内容提供商,我们有getContentResolver()
:如果您有Context
,则可以轻松查询数据。您甚至不必担心跨进程调用的详细信息(ContentProvider
)。
对于服务,您必须绑定它们,等待建立连接,如果您不想泄漏内存,请确保取消绑定它们。更糟糕的是,您必须处理AIDL远程服务。
举个例子:
我有一个文件下载器模块。目前有两种方法:内容提供商或服务。要开始每个新的下载,两者都很容易:
startService()
。你只需要一个上下文。getContentResolver()
并将新下载插入其队列中。您还需要一个上下文。但是在下载过程中,我希望获得一些信息(平均速度,完成百分比......)。问题出在这里:内容提供商更容易与之沟通。您只需要一个上下文并查询所需的信息。如果是服务,您需要绑定它,取消绑定它,或构建您自己的AIDL(如果它是远程服务)...
我问这个问题,因为上面的例子,服务似乎是内容提供商的正确方法,至少因为它的名称。
谢谢,
答案 0 :(得分:4)
我建议采取两种方式......
首先尝试使用实现Parcelable
的{{3}}。
基本上创建一个扩展ResultReceiver
的自己的类,然后在putExtra(String name, Parceable value
上通过Intent
从startService(Intent intent)
调用Activity
。然后,Service
可以使用send(int resultCode, Bundle resultData)
上的ResultReceiver
来发送数据。如果ResultReceiver
是您Activity
的内部类,则它将能够与其UI进行交互。
第二种可能性是使用Notifications
标志FLAG_ONGOING_EVENT
。这显然不会显示在Activity
本身,但会显示在Notification
栏中,但您可以创建一个自定义RemoteView
,其中包含进度和更新文本等,并附带每个更新的通知。这类似于Google Play在您的设备上安装或更新应用时所看到的内容。