Je reçois un avertissement dans mon code qui dit:
Cette classe AsyncTask doit être statique ou des fuites peuvent se produire (android.os.AsyncTask anonyme)
L'avertissement complet est:
Cette classe AsyncTask doit être statique ou des fuites peuvent se produire (android.os.AsyncTask anonyme) Un champ statique fuira les contextes. Les classes internes non statiques ont une référence implicite à leur classe externe. Si cette classe externe est par exemple un fragment ou une activité, cette référence signifie que le gestionnaire / chargeur / tâche de longue durée contiendra une référence à l'activité qui l'empêche de récupérer les ordures. De même, les références de champ directes aux activités et aux fragments de ces instances plus longues peuvent provoquer des fuites. Les classes ViewModel ne doivent jamais pointer vers des vues ou des contextes non liés à une application.
Voici mon code:
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
return null;
}
}.execute();
Comment puis-je corriger cela?
myActivity.getApplication()
dans le constructeur privé pour le Singleton, afin d'initialiser les classes RoomDB et autres classes). Mes ViewModels obtiennent l'instance Singleton comme référence privée pour effectuer certaines opérations sur la base de données. Ainsi, les ViewModels importent le package Singleton, ainsi que l' android.app.Application
un d'eux même android.app.Activity
. Puisque "the Singleton" n'a pas besoin d'importer ces ViewModels pour fonctionner, même ainsi, des fuites de mémoire peuvent-elles se produire?