Znalazłem jakieś rozwiązanie do usuwania bazy danych i odtwarzania go za pomocą 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();

Ale w tym ContentProviderClient klasa ma release(), który jest przestarzały , czy istnieje inny sposób zwolnienia zasobów.

Edytowany: Jeśli spróbuję użyć blisko () <) , wyświetla się jako ostrzeżenie w następujący sposób.

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

Wiele zasobów, takich jak typedarrays, VelocityTrackers, itp. Ta kontrola kubła wygląda na brakujące wywołania recyklingu ().

I blisko () <) <) Wyświetlany jako wyłączony, dlaczego?

enter image description here

2
Pratik Butani 16 luty 2017, 07:12

2 odpowiedzi

Najlepsza odpowiedź

W przypadku, gdy ktoś zastanawia się, jaki powinien być kod:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
    client.close();            
}
else
{
    client.release();
}
4
Wirling 23 maj 2017, 10:28

Jest zastąpiony przez close, ale jest dostępny tylko na API 24+

Zobacz więcej https://developer.Android.com/reference/ Android / Content / ContentProviderClient.html # zamknij ()

close na 24 jest taki sam jak release poniżej 24 Zobacz kod źródłowy 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();
}

Jest wyłączona, ponieważ musisz wybrać poprawne api level Wprowadź opis obrazu tutaj

2
WenChao 16 luty 2017, 04:57