Я просто следил за этой статьей о том, как избежать утечек памяти: блог разработчиков Android Ниже приведен фрагмент кода:
private static Drawable sBackground;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
if (sBackground == null) {
sBackground = getDrawable(R.drawable.large_bitmap);
}
label.setBackgroundDrawable(sBackground);
setContentView(label);
}
Говорят, что drawable имеет обратную ссылку на textview (и косвенно на активность); который будет сохранен при вращении - и, следовательно, утечке памяти.
Мой запрос заключается в том, что обратный вызов не будет reset при вращении - он получит верхний текст (который будет содержать новый контекст), следовательно, позволяя использовать предыдущие экземпляры текста/контекста, который должен быть GC.
EDIT. Ответы, которые я получаю, касаются того, как "решить" проблему - я этого не ищу! Пожалуйста, перечитайте запрос. Я добавляю более подробную информацию. Когда действие запускается, ссылки:
Drawable1 → TextView1 → Activity1
При повороте Activity1 и TextView1 уничтожаются, но не Drawable1
Drawable1 → TextView2 → Activity2
Это означает, что Activity1 и TextView1 могут быть GC'ed, поскольку ни один другой объект не ссылается на них. Итак, что происходит?
Неужели я ошибаюсь в этом понимании? Или может быть, что Drawable может иметь несколько просмотров как обратные вызовы? (Рассматривая исходный код, я не вижу список обратных вызовов для Drawable).