Androidでのプログラミングについて話している。
初期の頃は、finish()
現在のアクティビティを閉じるで、アクティビティスタックの前に戻り、System.exit(0)
アプリケーション全体を閉じる。
しかし、私は間違っていました。私は小さな実験を行い、両方が現在のアクティビティのみを終了することを理解しました。
気づいた唯一の違いは、Android 2.3.3
onActivityResult()
を使用してfinish()
に戻されます。一方、onActivityResult()
はSystem.exit(0)
に対して呼び出されません。ただし、Android 4.2.2、onActivityResult()は両方に対して呼び出されます!そして、extent()ではIntentがnullでした。これらの2つのデバイスでのみテストしました)
finish()
はfasterです(exit( ))そう、
2つの違いは何ですか?
どの状況で、exit()を使用できますか?
2つの方法の間に欠けているものがあると思います。誰かがもっと説明して、私を修正できることを願っています。
ありがとう
リクエストに応じて編集:
2つのアクティビティを含むAndroidアプリケーションを作成します。Intentを使用してLauncherアクティビティから2番目のアクティビティを呼び出します。2番目のアクティビティ内で、ボタンをクリックしてSystem.exit(0);
を呼び出します。 VMはさらに実行を停止し、プログラムは終了します。 "????( documentation による)
そこに最初の活動があります。どうして? (あなたが私が間違っていることを証明することを歓迎します/私は正しかったです)
実際、アクティビティが1つしかない場合は違いはありません。ただし、スタック上に複数のアクティビティがある場合、次のようになります。
System.exit(0)
が呼び出された場合、アプリケーションは強制終了され、1つのActivityActivAのみで即座に開始されます。Android Developer-
finish()
アクティビティが完了し、終了する必要があるときにこれを呼び出します。 ActivityResultは、onActivityResult()を介してあなたを起動した人に伝播されます。
System.exit(0)
VMはそれ以上の実行を停止し、プログラムは終了します。
ドキュメントによると、プログラムは終了します。
しかし、ドキュメントのバグのようです。 Javaプログラムの場合、それは正しいです。しかし、Androidに来ると、スタックから以前のアクティビティが表示されます。
AndroidコーディングはJavaコーディングを使用して行われるため、ほとんどのドキュメントはJavaのドキュメントと同じです。
ドキュメントから、
System.exit(0)
VMはそれ以上の実行を停止し、プログラムは終了します。
Androidアスペクトの場合、Word'program'を他のものに置き換える必要があります。Activityまたはコンテキスト。
Sa Qadaの答えは、テスト後に正解です。
finishはこのアクティビティを閉じてprevousに戻ります。
しかし、exitは現在のアクティビティも閉じ、すべてのfreezeのアクティビティを空にして、前のアクティビティを再開します
実際、アクティビティが1つしかない場合は違いはありません。ただし、スタック上に複数のアクティビティがある場合、次のようになります。
finish()-呼び出し元のアクティビティを終了すると、前のアクティビティが表示されます。 System.exit(0)-スタック上のアクティビティが1つ少ない状態でアプリを再起動します。そのため、ActivityAからActivityBを呼び出し、ActivityBでSystem.exit(0)が呼び出された場合、1つのアクティビティActivityAのみでアプリケーションが強制終了され、起動されます。