60

デストラクタでどのロジックがsuper.onDestroy();一番上に行くのでしょうか? 例えば:

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

ではない:

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

c++、obj-c、パスカルなどのように?

4

4 に答える 4

68

で何をしたいかによって異なりますonDestroy。これは、super.onDestroy が行うことです (この順序で):

  • アクティビティが管理していたダイアログを閉じます。
  • アクティビティが管理していたカーソルを閉じます。
  • 開いている検索ダイアログを閉じます

内部に入れるロジックがonDestroy、Android が行うこれら 3 つのことと関係がある場合は、順序を気にする必要があるかもしれません。それ以外の場合は、ほとんどの場合、問題になりません。

于 2010-12-12T20:01:03.897 に答える
13

Reporting Work Status トレーニングの ThreadSample.zip では、 onDestroy() にコメントがあります。

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

そのため、おそらくブロードキャスト レシーバーを使用する場合、スーパーは最後に配置する必要があります。

于 2014-05-26T23:05:49.677 に答える
10

基本の android クラスから拡張しているため、作成中に親クラスが最初に作成して初期化し、コンポーネントのシャットダウン/停止中に子が最初にリソースを初期化解除して解放できるようにすることは、常に良い方法です。これは、従うべき推奨されるアプローチです。ただし、ユースケースとシナリオに完全に依存します。

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

public void onDestroy(){
   //perform uninitialization and free resource
    super.onDestroy();
}
于 2016-02-25T14:50:42.840 に答える
5

あなたの質問は何ですか?どちらの方法でも実行できます。スーパークラスを自分のスーパークラスの前に呼び出すかどうかによって異なりますonDestroy()。通常、Androidでは問題にならないと思います。

また、 onDestroy()デストラクタではありません。オブジェクトを実際に破壊するわけではありません。特定の状態に基づいて呼び出されるメソッドです。onDestroy()したがって、スーパークラスが実行されて戻った後も、インスタンスはまだ生きていて、非常に良好です* 。

*ほとんどの場合、Android はいつでも自由にアクティビティを強制終了できますが、まだそこにあると想定できます。

于 2010-12-12T19:58:12.277 に答える