W moim kodzie pojawia się ostrzeżenie:
Ta klasa AsyncTask powinna być statyczna, w przeciwnym razie mogą wystąpić wycieki (anonimowy android.os.AsyncTask)
Pełne ostrzeżenie to:
Ta klasa AsyncTask powinna być statyczna, w przeciwnym razie mogą wystąpić wycieki (anonimowy android.os.AsyncTask) Pole statyczne spowoduje wyciek kontekstów. Niestatyczne klasy wewnętrzne mają niejawne odniesienie do swojej klasy zewnętrznej. Jeśli ta klasa zewnętrzna jest na przykład Fragmentem lub Działaniem, to odwołanie to oznacza, że długo działający moduł obsługi / moduł ładujący / zadanie będzie zawierał odwołanie do działania, które uniemożliwi gromadzenie śmieci. Podobnie bezpośrednie odniesienia pól do działań i fragmentów z tych dłużej działających instancji mogą powodować wycieki. Klasy ViewModel nigdy nie powinny wskazywać na widoki lub konteksty nieaplikacyjne.
To jest mój kod:
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
return null;
}
}.execute();
Jak to naprawić?
myActivity.getApplication()
do prywatnego konstruktora dla Singletona, w celu zainicjowania klas RoomDB i innych klas). Moje ViewModels pobierają instancję Singleton jako prywatne odwołanie do wykonywania niektórych operacji na DB. Tak więc ViewModels importuje pakiet Singleton, a android.app.Application
nawet jeden z nich android.app.Activity
. Ponieważ „Singleton” nie musi importować tych modeli ViewModels do działania, może jednak wystąpić przeciek pamięci?