Android ContentProviderClient版本()已弃用
我找到了一些删除数据库并使用ContentProvider重新创建它的解决方案Android ContentProviderClient版本()已弃用,android,android-contentprovider,android-contentresolver,contentproviderclient,Android,Android Contentprovider,Android Contentresolver,Contentproviderclient,我找到了一些删除数据库并使用ContentProvider重新创建它的解决方案 ContentResolver resolver = mContext.getContentResolver(); ContentProviderClient client = resolver.acquireContentProviderClient(KOOPSContentProvider.AUTHORITY); assert client != null;
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(),它将显示为警告,如下所示
与#release()一起使用后,应释放此ContentProviderClient。
许多资源,如TypeDarray、VelocityTrackers等,都应该
使用后回收(使用recycle()调用)。这张皮棉支票是用来找衣服的
缺少recycle()调用
和close()显示为禁用,为什么
它被
close
取代,但它仅在API 24上可用+
看更多
24日的关闭
与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级别
如果有人想知道代码应该是什么:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
client.close();
}
else
{
client.release();
}
那么旧设备呢?此ContentProviderClient在与#release()一起使用后应该释放。
许多资源,如TypeDarray、VelocityTrackers等,在使用后应该回收(通过一个recycle()调用)。此lint检查查找缺少的recycle()调用。显示为警告。我想lint
警告有点误导:)在下面的API 24上使用release
,使用Build.VERSION.SDK\u INT
进行检查,就像这里提到的那样