Ricevo un avviso nel mio codice che indica:
Questa classe AsyncTask dovrebbe essere statica o potrebbero verificarsi delle perdite (anonimo android.os.AsyncTask)
L'avvertimento completo è:
Questa classe AsyncTask dovrebbe essere statica o potrebbero verificarsi delle perdite (anonimo android.os.AsyncTask) Un campo statico perderà i contesti. Le classi interne non statiche hanno un riferimento implicito alla loro classe esterna. Se quella classe esterna è ad esempio un frammento o attività, questo riferimento indica che il gestore / caricatore / attività a esecuzione prolungata conterrà un riferimento all'attività che impedisce di raccogliere la spazzatura. Allo stesso modo, i riferimenti di campo diretti ad attività e frammenti di queste istanze più lunghe possono causare perdite. Le classi ViewModel non devono mai puntare a Viste o Contesti non applicativi.
Questo è il mio codice:
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
return null;
}
}.execute();
Come posso correggere questo?
myActivity.getApplication()
nel costruttore privato per Singleton, al fine di inizializzare le classi RoomDB e altre classi). I miei ViewModels ottengono l'istanza Singleton come riferimento privato per eseguire alcune operazioni sul DB. Quindi, i ViewModels importano il pacchetto Singleton e anche android.app.Application
uno di essi android.app.Activity
. Poiché "the Singleton" non ha bisogno di importare quei ViewModels per funzionare, anche così, potrebbero verificarsi perdite di memoria?