web-dev-qa-db-ja.com

finish()とSystem.exit(0)の違い

Androidでのプログラミングについて話している。

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

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


気づいた唯一の違いは、Android 2.3.3

  • ActivityResultは、onActivityResult()を使用してfinish()に戻されます。一方、onActivityResult()System.exit(0)に対して呼び出されません。

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

  • Exit()を使用する場合、タイムラグがありますが、finish()fasterです(exit( ))

そう、

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

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

2つの方法の間に欠けているものがあると思います。誰かがもっと説明して、私を修正できることを願っています。

ありがとう

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

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

そこに最初の活動があります。どうして? (あなたが私が間違っていることを証明することを歓迎します/私は正しかったです)

35
Nizam

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

  • finish()-呼び出し元のアクティビティを終了すると、前のアクティビティが表示されます。
  • System.exit(0)-スタック上のアクティビティが1つ少ない状態でアプリを再起動します。したがって、ActivityAからActivityBを呼び出し、ActivityBでSystem.exit(0)が呼び出された場合、アプリケーションは強制終了され、1つのActivityActivAのみで即座に開始されます。
22
Ayaz Alifov

Android Developer-

finish()

アクティビティが完了し、終了する必要があるときにこれを呼び出します。 ActivityResultは、onActivityResult()を介してあなたを起動した人に伝播されます。

System.exit(0)

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

13
mjosh

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

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

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

Androidアスペクトの場合、Word'program'を他のものに置き換える必要があります。Activityまたはコンテキスト。

9
user3141926

Sa Qadaの答えは、テスト後に正解です。

finishはこのアクティビティを閉じてprevousに戻ります。

しかし、exitは現在のアクティビティも閉じ、すべてのfreezeのアクティビティを空にして、前のアクティビティを再開します

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

finish()-呼び出し元のアクティビティを終了すると、前のアクティビティが表示されます。 System.exit(0)-スタック上のアクティビティが1つ少ない状態でアプリを再起動します。そのため、ActivityAからActivityBを呼び出し、ActivityBでSystem.exit(0)が呼び出された場合、1つのアクティビティActivityAのみでアプリケーションが強制終了され、起動されます。

3
nyconing