web-dev-qa-db-ja.com

アクティビティOnDestroyは呼び出されませんか?

ListActivityで次のコードを使用しています

// a separate class in project
public class MyActivity extends ListActivity {
    // some common functions here..
}

public class SelectLocation extends MyListActivity {

    public void onCreate(Bundle savedInstance) {
        // here.....
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (adap != null) adap = null;
        if (list != null) list = null;
        System.gc();
    }
}

onDestroyメソッドがコードで呼び出されない理由を教えてください。

26
UMAR

onDestroy()は、システムのリソース(メモリ、CPU時間など)が少ない場合にのみ呼び出され、アクティビティ/アプリケーションを強制終了するか、誰かがアクティビティでfinish()を呼び出した場合に決定します。

したがって、code()をテストするには、アクティビティでfinish()を呼び出すテストボタンを作成します。

続きを読む こちら

また、adapが重要なリソースになるまで、onDestroy()でこれらすべてを呼び出す必要はないと思います。そしてその場合でもAndroidシステムにはそれらを適切に破棄するメカニズムがあります。

56
Vladimir Ivanov

onDestroy メソッドが呼び出される保証はありません。

OnDestroyメソッドで使用しているコードはまったく必要ありません。 destroyが呼び出された場合、アクティビティはスタックから削除され、アクティビティによってのみ参照されるすべてのリソースを含むガベージコレクションのために解放されます。また、System.gc()はスタイルが悪いと想定されています。 On Androidシステムは、ガベージコレクションを行うのに最適なタイミングをほぼ常に認識しています。ほとんどの場合、アクティビティがガベージコレクションを終了するのは自動的にトリガされます。onDestroyメソッド全体を削除します。アプリケーションの全体的なメモリに問題がある場合、問題は別の場所にあります。

28
Janusz

ほとんどの電話機では、戻るボタンが押されると、onStop()およびonDestroy()メソッドが2回呼び出されますが、そうでない場合は、ボタンを作成してfinish()を呼び出すことができます。方法。

5
Jordi Tamargo