Почему Super.ondestroy () в Java Android идет сверху в деструкторах? [Дубликат

StackOverflow https://stackoverflow.com/questions/4423671

  •  09-10-2019
  •  | 
  •  

Вопрос

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

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

и не:

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

Как в C ++, OBJ-C, Pascal и т. Д.?

Это было полезно?

Решение

Это действительно зависит от того, что вы хотите сделать в вашем onDestroy. Отказ Это то, что Super.ondestroy (в таком порядке):

  • Уволить любые диалоги, которым управляется деятельность.
  • Закрыть любые курсоры деятельности управлялось.
  • Закрыть любой открытый диалог поиска

Если логика вы поместите внутри onDestroy Есть что-то связанное с этими тремя вещами, которые Android, то вам, возможно, придется беспокоиться о заказе. В противном случае, и в большинстве случаев это не имеет значения.

Другие советы

В Threadsample.zip на Сообщение о подготовке статуса работы, в OnDestroy есть комментарий ()

public void onDestroy() {
    ...
    // Must always call the super method at the end.
    super.onDestroy();
}

Так что, возможно, при использовании широковещательных приемников, супер должен идти в конце.

Поскольку мы продлеваемся от базовых классов Android, всегда есть хороший подход к тому, чтобы получить родительский класс создавать и инициализировать себя в первую очередь во время создания и сначала добиваться ребенка и освободить ресурс во время отключения / остановки компонентов. Это рекомендуемый подход для последования. Однако это полностью зависит от случаев использования и сценариев.

public void onCreate(Bundle bundle){
   super.onCreate(bundle);
   //perform child class initializations.
}

public void onDestroy(){
   //perform uninitialization and free resource
    super.onDestroy();
}

Каков твой вопрос? Вы можете сделать это в любом случае, это зависит, если вы хотите, чтобы ваш суперкласс onDestroy() называется перед вашим. Обычно я не думаю, что это имеет значение в Android.

Также,onDestroy() не деструктор. Это на самом деле не разрушает объект. Это просто метод, который называется на основе определенного состояния. Таким образом, ваш экземпляр все еще жив и очень хорошо * после суперкласса onDestroy() бежит и возвращает.

* Скорее всего, Android свободен убивать активность в любое время, но вы можете предположить, что это все еще там.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top