问题描述
我找到了一些删除数据库并使用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()显示为禁用,为什么?
1楼
万一有人想知道代码应该是什么:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
client.close();
}
else
{
client.release();
}
2楼
用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