32

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誰かが私のコードでメソッドが呼び出されない理由を教えてくれますか?

4

3 に答える 3

62

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

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

詳細はこちらをご覧ください

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

于 2010-12-15T12:43:45.967 に答える
28

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

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

于 2010-12-15T12:52:37.733 に答える
5

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

于 2013-05-15T02:50:18.263 に答える