首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以及何时使用使用ContentProviderClient获得的acquireUnstableContentProviderClient?

如何以及何时使用使用ContentProviderClient获得的acquireUnstableContentProviderClient?
EN

Stack Overflow用户
提问于 2015-10-29 20:19:29
回答 1查看 2.4K关注 0票数 4

使用用ContentProviderClient获得的ContentResolver#acquireContentProviderClient(...)ContentResolver#acquireUnstableContentProviderClient(...)有何不同?

无论使用哪种方法,我似乎都会编写相同的代码。如果获得的ContentProvider消失了,而我使用非不稳定的方法来获取客户端,我的应用程序中会有某种漏洞吗?

因此,如果您想要使用的ContentProvider运行在同一个进程中,或者如果它运行在system_server中,那么您可以继续使用稳定的方法获取客户机,否则您应该使用不稳定的方法,以防其他进程崩溃,或者在使用时卸载/重新安装承载ContentProvider的应用程序。但这让我不禁要问,使用稳定版本的获取方法有什么好处,为什么不总是使用不稳定版本的方法,以防万一呢?

当他们说下面的话时,他们到底是什么意思?

这将关闭平台中的机制,在内容提供者的进程消失时,清理依赖于内容提供者的进程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-06 08:16:48

如果您使用acquireContentProviderClient,那么如果内容提供者死了,您的进程就会被终止。

如果您使用acquireUnstableContentProviderClient,那么如果内容提供者死了,您的进程就不会被终止--相反,您将得到一个需要在代码中处理的DeadObjectException

当您得到一个DeadObjectException时,您需要使用不稳定版本编写额外的代码来处理恢复问题。您可以看到query方法在ContentResolver.java中的默认实现。

据我所知,您的应用程序不会因使用不稳定版本而导致泄漏。

至于为什么不选择总是使用不稳定的版本--我相信恰恰相反。很少有应用程序需要处理内容提供者崩溃并从崩溃中恢复。最简单的方法是让应用程序死掉并重新启动。内容提供者崩溃应该是非常罕见的-内存损坏、磁盘损坏等。除非您有自己的提供者,因为某些特定/奇怪的原因,您将不需要使用不稳定的版本。

这将关闭平台中的机制,在内容提供者的进程消失时,清理依赖于内容提供者的进程。

这是杀死所有使用内容提供程序的进程的平台逻辑。这意味着如果使用不稳定版本,应用程序将不会被关闭。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33423825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档