4

私のアプリには3つのクラスがあります。最初のクラスはスプラッシュ スクリーン、2 番目のクラスはプレイリストのリスト、3 番目のクラスはそのプレイリストのコンテンツを含みます。プレイリストが選択されると、その 3 番目のクラスがプレイリスト コンテンツの表示を開始します。2番目のクラスで私は持っています:

@Override
    protected void onStop() {
        super.onStop();
        System.out.println("onStop Playlist!!!!");
    }

    protected void onDestroy() {
        super.onDestroy();
        System.out.println("onDestroy Playlist");
    }

3 番目のクラスの開始準備が整うと、DDMS で :"onStop Playlist!!!!"と. というメッセージが表示されます"onDestroy Playlist"。なぜこのメソッドが呼び出されるのですか? onPauseメソッドのみを呼び出すべきではありませんか?問題は、アプリの終了時にタイマーを停止したいということですが、この場合、どこでタイマーを停止できるかわかりません。何か案が?

私はこのように3番目のクラスを呼び出します:

Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
i.putExtra("id", idPlaylist[position]);
i.putExtra("timer", timerPlaylist[position]);
startActivity(i);
finish();

問題は、私が呼び出すことfinish()です ?

4

3 に答える 3

5

Activityクラスの(メソッドの)ドキュメントを読むと、次のことonDestroy()がわかります。

アクティビティが破棄される前に受け取る最後の電話。これは、アクティビティが終了している (finish() が呼び出された) ため、またはシステムがスペースを節約するためにアクティビティのこのインスタンスを一時的に破棄しているために発生する可能性があります。これら 2 つのシナリオは、isFinishing() メソッドで区別できます。

于 2011-11-24T09:18:17.037 に答える
0

で 2 番目のアクティビティを終了しているためですfinish()startActivityForResult()したがって、2 番目のアクティビティで使用およびオーバーライドする代わりにonActivityResult()、この場合、2 番目のアクティビティonPause()が呼び出され、3 番目のアクティビティのときfinish()に、2 番目のアクティビティのonActivityResult()method()に戻ることができます。

このコードを試してください...

Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
i.putExtra("id", idPlaylist[position]);
i.putExtra("timer", timerPlaylist[position]);
startActivityForResult(i,RESULT_OK);
于 2011-11-24T09:17:03.603 に答える
0

はい、電話しますfinish()。これは終了するため、そのアクティビティを破棄します。finish()通話を削除するだけです。アクティビティを破棄したい場合にのみ必要です。

于 2011-11-24T09:35:40.700 に答える