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(), который осуждается, Есть ли другой способ, чтобы освободить ресурсы.

Отредактировано: Если я пытаюсь использовать (), он отображается как предупреждающий.

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

Многие ресурсы, такие как TypedArrays, VelocityTrackers и т.д., должны быть переработаны (с вызовом рецикла()) после использования. Эта проверка линзы ищет недостающие вызовы recycle().

и закрыть() отображение как отключено, почему?

enter image description here

ответ

2

он заменяется close, но она доступна только на API 24+

подробнее https://developer.android.com/reference/android/content/ContentProviderClient.html#close()

close 24 так же, как release ниже 2 см исходный код 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, VelocityTrackers и т. Д., После использования. Эта проверка линзы ищет недостающие вызовы recycle(). * Отображается как предупреждение. * –

+0

Я предполагаю, что предупреждение «lint» немного вводит в заблуждение :) – WenChao

1

в случае, если кто-то интересно, что код должен быть:

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