2

我找到了一些解決方案來刪除數據庫並使用ContentProvider重新創建它。ContentProviderClient release()已棄用

 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等,應是 使用後回收的(與循環()調用)。此檢查檢查 缺少回收()調用。

and close()顯示爲禁用,爲什麼?

enter image description here

回答

2

它是由close替換,但它僅適用於API 24+

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

close 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 enter image description here

+0

那麼什麼舊的設備? –

+0

'這個ContentProviderClient應該在使用#release()後釋放。' 許多資源,例如TypedArrays,VelocityTracker等等,在使用後應該被回收(帶有recycle()調用)。此lint檢查查找丟失的回收()調用。 *顯示爲警告。* –

+0

我猜'lint'警告有點讓人誤解:) – WenChao

1

想知道的代碼應該是什麼:

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