Difference between finish() and System.exit(0)

activity-finish, android

Solution

Actually there is no difference if you have only one activity. However, if you have several activities on the stack, then:

- finish() - finishes the activity where it is called from and you see the previous activity.

- System.exit(0) - restarts the app with one fewer activity on the stack. So, if you called ActivityB from ActivityA, and `System.exit(0)` is called in ActivityB, then the application will be killed and started immediately with only one activity ActivityA

Problem

I'm talking about programming in android. In early days I thought that, `finish()` closes current activity and go back to the previous in Activity stack, and `System.exit(0)` closes the whole application. But I was wrong. I made a small experiment and understood that Both will finish only the current Activity. The only differences that I could notice is that, in Android 2.3.3 - The ActivityResult is propagated back to `onActivityResult()` using `finish()`. Whereas `onActivityResult()` not called for `System.exit(0)`. But in Android 4.2.2, onActivityResult() is called for both! and Intent was null for exit(). (I tested only in these 2 devices) - There is a time lag when using exit() whereas `finish()` is faster.(seems like more background operations are there in exit()) So, what's the difference between two? In which situations, I can use exit()? I believe there is something more that I'm missing in between the two methods. Hope somebody can Explain more and correct me. Thanks EDIT UPON REQUEST: Make an Android application with 2 Activities. Call second Activity from Launcher activity using Intent. Now, inside the second activity, upon a button click, call `System.exit(0);`. "The VM stops further execution and program will exit."????(according to documentation) I see first activity there. Why? (You are welcome to prove that I'm wrong/ I was right)

Original source

Related problems