不推荐使用ContentProviderClient release()

时间:2017-02-16 04:12:38

标签: android android-contentprovider android-contentresolver contentproviderclient

我找到了一些删除数据库的解决方案,并使用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() 已弃用,是否有其他方法可以释放资源。

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

  

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

     

应该有许多资源,例如TypedArrays,VelocityTrackers等   使用后回收(使用recycle()调用)。这个lint检查寻找   缺少recycle()调用。

关闭()显示为已禁用,为什么?

enter image description here

2 个答案:

答案 0 :(得分:3)

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

<!DOCTYPE html>
<html>
<head>
  <button onclick="generate();">Generate password</button>
</head>
<body>
  <p id="pw">
    <!-- password should go here -->
  </p>
</body>
</html>

答案 1 :(得分:2)

它被close取代,但仅在API 24 +

上可用

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

24上的

close与24下的release相同 请参阅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 enter image description here