Je comprends les concepts de base de la fuite de mémoire en Java (c'est-à-dire, certains objets inutiles sont encore référencés par d'autres et ne peuvent pas être GCed).Que se passe-t-il en interne pendant une fuite de fenêtre Android?
Comment puis-je mapper ce concept à l'exception WindowLeaked
dans Android?
Par exemple, le code suivant générerait une exception WindowLeaked
lorsque changer l'orientation pendant AsyncTask
exécution. Dans ce cas, quels objets maintiennent toujours les références inutiles? ProgressDialog
ou le Activity
?
public class WindowLeakedTestActivity extends AppCompatActivity {
...
static class MyTask extends AsyncTask<Void, Void, String> {
Context context;
private ProgressDialog mProgress;
public MyTask(Context c) {
context = c;
}
protected void onPreExecute() {
super.onPreExecute();
mProgress = ProgressDialog.show(context, "hello world", "wait", true, true);
}
protected String doInBackground(Void... params) {
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "";
}
}
}
merci de répondre! mais pourquoi 'progressdialog' devient fuit quand' activity' est détruit? – JackWM
http://stackoverflow.com/a/21986772/966550 – waqaslam
Bon lien. Mais il ne répond pas qui détient les références à 'progressdialog' de sorte qu'il ne peut pas être GCed. – JackWM