如果我从 Activity 调用 ContentProvider,ContentProvider 会在哪个线程中运行?
例如。如果 Activity 被终止并且查询正在 ContentProvider 中执行,会发生什么情况?假设您的网络查询速度很慢。
如果您指的是使用 ContentResolver 调用 ContentProvider 的正常用例,那么据我所知,会发生以下情况:
我在此示例中假设您的 ContentProvider 位于一个进程中,而您的 Activity 位于另一个进程中。
如果尚未创建 ContentProvider,则使用应用程序进程的“主”线程调用 onCreate() 方法。
query()/insert()/update()/delete() 方法是使用 BinderThreads 调用的,BinderThreads 位于每个应用程序进程中等待来自其他进程的传入命令。
那么,如果触发 query()/insert()/etc 的 Activity 在这些方法调用之一的中间被终止,会发生什么情况呢?我不能肯定地说,但我相当有信心 ContentProvider 中发生的任何事情都将继续,因为 ContentProvider 进程应该继续不受影响,但该方法返回后会发生什么我不能肯定地说。
我不确定慢速网络将如何参与其中,除非您的内容提供商由网络而不是通常的 sqlite 数据库支持?
澄清:
调用 ContentProvider 函数(查询/插入/更新/删除/等)时有两种可能性:
您的 ContentProvider 与调用者处于同一进程中。如果是这样,ContentProvider 函数将与调用者在同一线程上同步运行。
您的 ContentProvider 与调用者处于不同的进程中。如果是这样,则 ContentProvider 函数在 ContentProvider 进程中的绑定器线程上运行。
在这两种情况下,调用者都会被阻止,直到 ContentProvider 函数返回。一如既往地阅读 Google 和/或 AOSP 源代码的完整文档。
http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/reference/android/content/ContentProvider.html
http://developer.android.com/guide/topics/providers/content-provider-basics.html http://developer.android.com/guide/topics/providers/content-provider-basics.html
http://developer.android.com/guide/components/processes-and-threads.html http://developer.android.com/guide/components/processes-and-threads.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)