web-dev-qa-db-ja.com

Androidで新しいアクティビティを開始した後にfinish()を呼び出すことをお勧めしますか?

お気に入り:

_startActivity(intent);
finish();
_

finish() explicitly, onDestroy()を呼び出さないと、前のアクティビティでは呼び出されず、メモリが不足します_(OutOfMemory Exception)._

したがって、finish() explicitly to prevent OutOfMemory Exception?を呼び出すことをお勧めします。

25
Marton_hun

新しいアクティビティを開始すると、現在のアクティビティが現在のタスクのバックスタックにプッシュされます。 (この動作はフラグやマニフェストを介して変更できますが、これがデフォルトの動作です。)ユーザーが戻る機能を押すと、最上位のアクティビティが終了し、スタックがポップされます。その結果、ユーザーはアプリが前のアクティビティに戻るのを見ることができます。

新しいアクティビティを開始した後でfinish()を呼び出すのはまったく問題ありません。その結果、現在のアクティビティ(新しいアクティビティを開始したばかりなので、スタックの最上位にはありません)がスタックから削除されます。次に、ユーザーが[戻る]を押すと、バックスタックの前のアクティビティに移動します(または、スタックが空の場合はアプリを終了します)。

たとえば、アクティビティAとBの間を行き来して、常に新しいアクティビティを開始し、finish()を呼び出さない場合、スタックが各アクティビティのインスタンスでいっぱいになるため、OOM例外が発生する可能性があります。

これについて詳しくは、ガイドトピック タスクとバックスタック を参照してください。また、アクティビティ間のサイクリングを正しく処理する方法についても説明します。

35
Ted Hopp

そのActivityのインスタンスが必要ない場合は、これを行うことで問題ありません。したがって、次のActivityを押すと、これには戻らないことがわかりますが、そのActivityがあった場所の下のスタック、またはホーム画面にあるものは何でもあります。 。

ただし、これがOOM例外を受け取る理由かどうかはわかりません。代わりに、それがどこから来ているのかを理解する必要があります。 Bitmapsを使用している場合は、例外が発生している可能性があります。

2
codeMagic