sat*_*ine 4 android android-contentprovider
如何使用ContentProviderClient与ContentResolver#acquireContentProviderClient(...)任何不同的获得ContentResolver#acquireUnstableContentProviderClient(...)?
似乎无论我使用哪种方法,我都会编写相同的代码。如果获取的 ContentProvider 消失并且我使用非不稳定方法获取客户端,我的应用程序中是否会出现某种泄漏?
所以我猜如果你想使用的 ContentProvider 在同一个进程中运行或者它正在运行,system_server那么你可以继续使用 stable 方法获取客户端,否则你应该使用不稳定的方法以防其他进程崩溃或者托管 ContentProvider 的应用程序在您使用它时被卸载/重新安装。但这让我问,使用稳定版本的获取方法是否有某种优势,为什么不总是使用不稳定版本的方法以防万一?
当他们说以下内容时,他们究竟是什么意思?
如果该内容提供者的进程消失,这将关闭平台中的机制清理依赖于该内容提供者的进程。
如果您使用,acquireContentProviderClient那么如果内容提供者死亡,您的进程将被终止。
如果您使用,acquireUnstableContentProviderClient那么如果内容提供者死亡,您的进程将不会被终止 - 相反,您将获得一个DeadObjectException- 您需要在代码中处理。
当您获得DeadObjectException. 您可以在中看到query方法的默认android实现ContentResolver.java
据我了解,您的应用程序不会因使用不稳定版本而导致泄漏。
至于为什么不总是选择使用不稳定的版本 - 我相信它反过来。很少有应用程序需要处理内容提供商崩溃并从中恢复。最简单的方法是让您的应用程序死亡并重新启动。内容提供者崩溃应该是极其罕见的——内存损坏、磁盘损坏等。除非您有自己的提供程序,但由于某些特定/奇怪的原因预计会崩溃,否则您不需要使用不稳定的版本。
如果该内容提供者的进程消失,这将关闭平台中的机制清理依赖于该内容提供者的进程。
这是杀死所有使用内容提供程序的进程的平台逻辑。这意味着如果您使用不稳定版本,您的应用程序不会被终止
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |