当前位置: 代码迷 >> Android >> ContentProviderClient版本()已弃用
  详细解决方案

ContentProviderClient版本()已弃用

热度:34   发布时间:2023-08-04 11:16:42.0

我找到了一些删除数据库并使用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()调用)。 此棉绒检查将查找丢失的recycle()调用。

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

万一有人想知道代码应该是什么:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
    client.close();            
}
else
{
    client.release();
}

close代替,但仅在API 24+上可用

查看更多

在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

  相关解决方案