36

開始時にインターネットから画像をロードするアクティビティを取得しました。メモリを節約するために、[戻る] ボタンが押されてアクティビティが終了したときに、アクティビティにすべてのデータをダンプさせます。つまり、その中にあるすべての文字列と画像を削除します。これを行う最善の方法は、アクティビティを殺すことだと思いました。

戻るボタンが押されたときのコールバックがわかりません。そのため、タスクにonPause()と のコールバックを使用しようとしましたが、どちらの方法でもアプリを強制的に閉じます。onStop()コードは次のとおりです。

public void onPause() {
    this.finish();
}
public void onStop() {
    finish();
}

これの複数のバリエーションを試しましたが、どれも機能していないようです。何か案は?

4

5 に答える 5

80

シンプルなオーバーライド onBackPressed メソッド:

    @Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }
于 2012-02-29T15:15:29.210 に答える
43

これをアクティビティに追加します

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}
于 2011-01-24T05:06:05.073 に答える
14
public boolean onKeyDown(int keycode, KeyEvent event) {
    if (keycode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
    }
    return super.onKeyDown(keycode, event);
}

私のアプリは上記のコードで終了しました。

于 2012-05-08T03:35:26.823 に答える
8

まず第一にfinish()、プロセスを破壊せず、メモリを解放しません。アクティビティ スタックからアクティビティを削除するだけです。一連の質問で回答されるプロセスを強制終了する必要があります (これは数回尋ねられるため)。

しかし、適切な答えは -やらないでください。Android OS は、メモリが必要になると自動的にメモリを解放します。メモリを解放しないことで、ユーザーがアプリに戻ったときにアプリの起動が速くなります。

このトピックに関する素晴らしい記事については、こちらをご覧ください。

于 2011-01-24T05:12:51.313 に答える
7

ここで、アプリケーションのライフサイクルがどのように機能するかの構造を調べるonPause()と、別のアクティビティがフォーカスを取得しonStop()たときに が呼び出され、アクティビティが表示されなくなったときに が呼び出されることがわかります。

私がまだ学んだことfinish()から、アクティブなアクティビティおよび/またはフォーカスのあるアクティビティからのみ呼び出すことができます。finish()メソッドから呼び出しonPause()ている場合は、アクティビティがアクティブでなくなったときに呼び出していることを意味します。したがって、例外がスローされます。

finish()それから呼び出しているonStop()場合、アクティビティはバックグラウンドに送信されているため、表示されなくなり、この例外が発生します。

backボタンを押すと、がonStop()呼び出されます。

ほとんどの場合、現在やりたいことは Android によって自動的に行われます。

于 2011-01-24T05:09:23.250 に答える