Proper onDestroy () / Как избежать утечек памяти
Я прочитал ряд статей о том, как избежать утечек памяти в Android, но яЯ до сих пор не совсем уверен, правильно ли я понял.
Мое приложение состоит из одного.Activity
Я неВ этой Деятельности нет приватных или статических членов, весь код запускается изнутри.onCreate()
В них есть некоторые автономные статические классы, чьи статические экземпляры иногда содержат ссылки наContext
или жеView
s. В моемonDestroy()
Метод, я установил все эти экземпляры на ноль.Я перерабатываю все своиBitmap
s.Q1: Этого достаточно?
Что меня смущает, так это классический пример запрета, который вы можете найти в сети (http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/):
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
setContentView(label);
}
Я думал, что, как толькоonCreate
отделки,label
выходит из области видимости и GCed.
Q2: Как это может создать утечку памяти?
Моя активность в основном выглядит так:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Statics */
AssetUtils.initIndex(this);
BitmapLoader.startInstance(this);
/* frame */
ViewGroup frame = (ViewGroup) getLayoutInflater().inflate(R.layout.frame, null);
this.setContentView(frame);
/* create controller */
Controller controller = new Controller(frame, getLayoutInflater());
/* START */
controller.start();
}
@Override
public void onDestroy() {
super.onStop();
/* Statics */
AssetUtils.destroyInstance();
BitmapLoader.destroyInstance();
}
внутриController
Я иногда получаюContext
с помощьюView#getContext()
передать его в созданный вручнуюView
и тому подобное. Это's никогда не хранится статически где-то, только в переменных-членах классов, к которым все возвращаются.Controller
Q3: Я что-то упустил из виду?