Мы знаем, что анонимный внутренний класс может вызвать утечку памяти. Но почему он не работает при асинхронном сетевом вызове.
Например:
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.get()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
// String str = response.body().string();
// do sth to our View, but those views may be null when activity finished
}
}
});
Мы изменим наши состояния представления при вызове метода обратного вызова, но эти представления всегда будут нулевыми, когда активность будет завершена. Почему этот анонимный экземпляр внутреннего класса для обратного вызова не может вызвать утечку активности.