26

お気に入り:

startActivity(intent);
finish();

finish() explicitly, onDestroy()前のActivityが呼び出されずに呼び出されず、メモリが不足する(OutOfMemory Exception).

だから、電話するのは良い考えですか?finish() explicitly to prevent OutOfMemory Exception?

4

3 に答える 3

39

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

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

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

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

于 2013-08-07T18:45:45.570 に答える
2

そのインスタンスが必要ない場合は、これで問題ありませんActivity。したがって、次の画面に戻るときActivityは、この画面に戻るのではなく、その下のスタックにあるもの、Activityまたはそれ以上ない場合はホーム画面に戻ることを知っておいてください。

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

于 2013-08-07T18:43:11.643 に答える