6

アクティビティの ondestroy を上書きするとき、コマンドを super.onDestroy() の前後に配置する必要がありますか?

protected void onDestroy() {

    //option 1: callback before or ...

    super.onDestroy();

    //option 2: callback after super.onDestroy();
}

(今私は恐れています: もし super.onDestroy が速すぎると、オプション 2 に到達することはありません.)

4

6 に答える 6

7

アクティビティ リソースの使用に関連する可能性のあるものはすべて、 への呼び出しの前に配置する必要がありますsuper.onDestroy()。それ以降のコードに到達しますが、これらのリソースが必要な場合は問題が発生する可能性があります。

于 2012-10-12T12:37:28.250 に答える
4

super.onDestroy();例の後にコードを配置します。

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

    // Put code here.

}

メソッドをオーバーライドすると、コードの実行が終了します。

于 2012-10-12T12:42:23.113 に答える
3

これは、super.onDestroy(); を呼び出すとどうなるかです。

Android ソース

protected void onDestroy() {
    mCalled = true;

    // dismiss any dialogs we are managing.
    if (mManagedDialogs != null) {

        final int numDialogs = mManagedDialogs.size();
        for (int i = 0; i < numDialogs; i++) {
            final Dialog dialog = mManagedDialogs.valueAt(i);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }

    // also dismiss search dialog if showing
    // TODO more generic than just this manager
    SearchManager searchManager = 
        (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchManager.stopSearch();

    // close any cursors we are managing.
    int numCursors = mManagedCursors.size();
    for (int i = 0; i < numCursors; i++) {
        ManagedCursor c = mManagedCursors.get(i);
        if (c != null) {
            c.mCursor.close();
        }
    }
}

基本的にこれは、コードの前または後に呼び出すかどうかは問題ではないことを意味します。

于 2012-10-12T14:02:08.743 に答える
1

super.onDestroy を呼び出しても、スレッドなどの呼び出しが中断されることはありません。コードは、super.onDestroy の前後のどこに配置しても実行されます。

super.onDestroy は、フレームワークによってこのアクティビティで参照される可能性のあるリソース (システム ダイアログやマネージ カーソルなど) のみを解放します。

詳細については、このリンクを確認することをお勧めします

http://developer.android.com/reference/android/app/Activity.html#onDestroy()

于 2012-10-12T12:56:42.717 に答える
0

場合によります。関数の後にアクションを適用するsuper場合は、スーパーの後に関数を配置する必要があります。super最初の使用法を理解する必要があると思います。たとえば、この質問を見てください

于 2012-10-12T12:39:59.193 に答える
0

オプション 2 で到着します。onDestroy() は実際にはオブジェクトを破棄しません。スーパークラスの onDestroy() が実行されて戻った後も、インスタンスはまだ生きています。

編集:これは onDestroy が順番に行うことです:

  • アクティビティが管理していたダイアログを閉じます。
  • アクティビティが管理していたカーソルを閉じます。
  • 開いている検索ダイアログを閉じます
于 2012-10-12T12:42:40.977 に答える