170

私はしばらくAndroidアプリケーションを開発しており、アクティビティのライフサイクルとアプリケーションのライフサイクルに関する多くの投稿をフォローしています。

私はActivity.finish()メソッド呼び出しが途中でどこかで呼び出され、Activity.onDestroy()スタックからアクティビティを削除することを知っています。オペレーティングシステムとガベージコレクターは、彼が「自分のトリックを実行」して、楽しい時間を見つけたときにメモリを解放できることを何らかの形で示していると思いますそれで....

この投稿にたどり着きました- アプリケーションを終了することは眉をひそめていますか? マーク・マーフィーの答えを読んでください。

finish()メソッドが実際に何をするのか、少し混乱しました。

私が電話する可能性と電話finish()onDestroy()れない可能性はありますか?

4

13 に答える 13

188

アクティビティを呼び出すfinish()と、メソッドonDestroy()が実行されます。このメソッドは、次のようなことができます。

  1. アクティビティが管理していたダイアログを閉じます。
  2. アクティビティが管理していたカーソルを閉じます。
  3. 開いている検索ダイアログを閉じます

また、onDestroy()デストラクタではありません。オブジェクトを実際に破壊するわけではありません。特定の状態に基づいて呼び出されるメソッドです。そのため、スーパークラスが実行されて戻った後も、インスタンスはまだ生きており、非常に良好です* onDestroy()。ユーザーがアプリを再起動したい場合に備えて、Android はプロセスを保持します。これにより、起動フェーズが速くなります。プロセスは何も実行せず、メモリを再利用する必要がある場合、プロセスは強制終了されます

于 2012-06-02T14:14:09.987 に答える
9

Finish() メソッドは、現在のアクティビティを破棄します。ユーザーが戻るボタンを押したときにこのアクティビティを何度もロードしたくない場合は、このメソッドを使用できます。基本的に、.current スタックからアクティビティをクリアします。

于 2013-08-12T11:13:33.193 に答える
3

私の調査によると、finish()メソッドは実際にいくつかの破棄操作をキューに配置しますが、アクティビティはすぐには破棄されません。ただし、破壊は予定されています。

たとえば、まだ実行されていないwhilefinish()をコールバックに配置すると、最初に が実行され、その後でのみが呼び出されます。onActivityResult()onResume()onResume()onStop()onDestroy()

注:ドキュメントonDestroy()に記載されているように、まったく呼び出されない場合があります。

于 2016-02-25T06:51:32.077 に答える