2

我找到了一些解决方案来删除数据库并使用 ContentProvider 重新创建它。

        ContentResolver resolver = mContext.getContentResolver();
        ContentProviderClient client = resolver.acquireContentProviderClient(KOOPSContentProvider.AUTHORITY);

        assert client != null;
        KOOPSContentProvider provider = (KOOPSContentProvider) client.getLocalContentProvider();

        assert provider != null;
        provider.resetDatabase();

        client.release();

但是在那个ContentProviderClient类已经release()弃用了,有没有其他方法可以释放资源。

编辑:如果我尝试使用close(),它会显示如下警告。

This ContentProviderClient should be freed up after use with #release().

许多资源,例如 TypedArrays、VelocityTrackers 等,应该在使用后回收(通过 recycle() 调用)。此 lint 检查查找丢失的 recycle() 调用。

并且close()显示为禁用,为什么?

在此处输入图像描述

4

2 回答 2

5

如果有人想知道代码应该是什么:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
    client.close();            
}
else
{
    client.release();
}
于 2017-05-23T10:28:42.177 回答
2

它已被替换,close但仅在 API 24+ 上可用

查看更多https://developer.android.com/reference/android/content/ContentProviderClient.html#close()

closeon 24 和release下面的 24 一样,见源码ContentProviderClient

  /**
 * Closes this client connection, indicating to the system that the
 * underlying {@link ContentProvider} is no longer needed.
 */
@Override
public void close() {
    closeInternal();
}

/**
 * @deprecated replaced by {@link #close()}.
 */
@Deprecated
public boolean release() {
    return closeInternal();
}

它被禁用,因为您需要选择正确的api level 在此处输入图像描述

于 2017-02-16T04:23:29.063 回答