42

Androidでのプログラミングについてです。

初期の頃は、finish() 現在のアクティビティを閉じてアクティビティスタックの前に戻り、System.exit(0) アプリケーション全体を閉じると思っていました。

しかし、私は間違っていました。私は小さな実験を行い、両方が現在の Activity のみを終了することを理解しました。


私が気付く唯一の違いは、Android 2.3.3

  • ActivityResultonActivityResult()はusingに伝播されますfinish()onActivityResult()求められていないのに System.exit(0)

しかし、Android 4.2.2 では、両方に対して onActivityResult() が呼び出されます。exit() のインテントは null でした。(私はこれら 2 つのデバイスでのみテストしました)

  • exit() を使用するとタイムラグが発生しますfinish()が、高速です (exit() にはより多くのバックグラウンド操作があるようです)。

そう、

  1. 2つの違いは何ですか?

  2. どのような状況で exit() を使用できますか?

私は、2 つの方法の間に欠けているものがあると信じています。誰かがもっと説明して私を訂正してくれることを願っています。

ありがとう

リクエストに応じて編集:

2 つのアクティビティで Android アプリケーションを作成します。Intent を使用して Launcher アクティビティから 2 番目のアクティビティを呼び出します。次に、2 番目のアクティビティ内で、ボタンのクリック時に を呼び出しますSystem.exit(0);。" VM はそれ以上の実行を停止し、プログラムは終了します。 "????(ドキュメントによると)

そこに最初の活動が見られます。なんで?(私が間違っている/私が正しかったことを証明してください)

4

4 に答える 4

35

実際には、アクティビティが 1 つしかない場合でも違いはありません。ただし、スタックに複数のアクティビティがある場合は、次のようになります。

  • finish() - 呼び出されたアクティビティを終了し、前のアクティビティが表示されます。
  • System.exit(0) - スタック上のアクティビティを 1 つ減らしてアプリを再起動します。したがって、ActivityA から ActivityB をSystem.exit(0)呼び出し、ActivityB で呼び出された場合、アプリケーションは強制終了され、ActivityA の 1 つのアクティビティだけですぐに開始されます。
于 2015-05-13T14:27:25.933 に答える
9

ドキュメントによると、プログラムは終了します。
しかし、ドキュメントのバグのようです。Javaプログラムの場合は正解です。しかし、Android になると、スタックから前のアクティビティが表示されます。

Android のコーディングは Java コーディングを使用して行われるため、ほとんどのドキュメントは Java のドキュメントと同じです。
ドキュメントから、

System.exit(0)
VM はそれ以上の実行を停止し、プログラムは終了します。

Android の側面では、「プログラム」という単語を別のものに置き換える必要があります。アクティビティまたはコンテキストの場合があります。

于 2013-12-28T13:06:47.560 に答える
3

私のテストの後、Sa Qadaの答えは正しいです。

finish はこのアクティビティを終了し、前に戻ります。

ただし、終了すると現在のアクティビティも閉じられ、フリーズ中のすべてのアクティビティが空になり、前のアクティビティが再開されます

実際には、アクティビティが 1 つしかない場合でも違いはありません。ただし、スタックに複数のアクティビティがある場合は、次のようになります。

finish() - 呼び出されたアクティビティを終了し、前のアクティビティが表示されます。System.exit(0) - スタック上のアクティビティを 1 つ減らしてアプリを再起動します。したがって、ActivityA から ActivityB を呼び出し、System.exit(0) が ActivityB で呼び出された場合、アプリケーションは強制終了され、ActivityA の 1 つのアクティビティだけですぐに開始されます。

于 2016-05-10T04:36:03.557 に答える