Почему super.onDestroy() в java Android занимает первое место в деструкторах?
Согласно какой логике это делает super.onDestroy();
в деструкторах идет сверху? Например:
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
}
и не:
protected void onDestroy() {
releaseMediaPlayer();
super.onDestroy();
}
Как в c++, obj-c, паскале и т.д.?
Ответы
Ответ 1
Это действительно зависит от того, что вы хотите сделать в своем onDestroy
. Это то, что super.onDestroy делает (в этом порядке):
- Отключите все диалоги, которыми управляет деятельность.
- Закройте все курсоры, которыми управляла деятельность.
- Закрыть любой открытый диалог поиска
Если логика, введенная внутри onDestroy
, имеет какое-то отношение к тем трем вещам, которые делает андроид, тогда вам, возможно, придется беспокоиться о порядке. В противном случае, и в большинстве случаев это не имеет значения.
Ответ 2
В ThreadSample.zip на Обучении отчета о состоянии отчетности, есть комментарий в onDestroy()
public void onDestroy() {
...
// Must always call the super method at the end.
super.onDestroy();
}
Поэтому, возможно, при использовании широковещательных приемников супер должен идти в конце.
Ответ 3
Какой у тебя вопрос? Вы можете сделать это в любом случае, это зависит от того, хотите ли вы, чтобы ваш суперкласс onDestroy()
назывался до вашего. Обычно я не думаю, что это важно в андроиде.
Кроме того,
onDestroy()
не является деструктором. Это фактически не уничтожает объект. Это просто метод, который называется на основе определенного состояния. Таким образом, ваш экземпляр все еще жив и очень хорошо * после того, как суперкласс onDestroy()
запускается и возвращается.
* Скорее всего, андроид может убить всю активность в любое время, но вы можете предположить, что он все еще там.
Ответ 4
Поскольку мы расширяемся от базовых классов андроида, это всегда хороший подход, позволяющий родительскому классу создавать и инициализировать себя во время создания и позволять ребенку сначала инициализировать и освобождать ресурс во время остановки/остановки компонентов. Это рекомендуемый подход. однако это полностью зависит от вариантов использования и сценариев.
public void onCreate(Bundle bundle){
super.onCreate(bundle);
//perform child class initializations.
}
public void onDestroy(){
//perform uninitialization and free resource
super.onDestroy();
}