Подтвердить что ты не робот

Почему super.onDestroy() в java Android занимает первое место в деструкторах?

Согласно какой логике это делает super.onDestroy(); в деструкторах идет сверху? Например:

protected void onDestroy() {        
    super.onDestroy();
    releaseMediaPlayer();
}

и не:

protected void onDestroy() {        
    releaseMediaPlayer();
    super.onDestroy();
}

Как в c++, obj-c, паскале и т.д.?

4b9b3361

Ответ 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();
}