Android: Is onPause() guaranteed to be called after finish()?

android, java

Solution

Android will generally call `onPause()` if you call `finish()` at some point during your Activity's lifecycle unless you call `finish()` in your `onCreate()`.

public class MainActivity extends ActionBarActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    finish();
  }



  @Override
  protected void onPause() {
    super.onPause();
    Log.d(TAG, "onPause");
  }

  @Override
  protected void onStop() {
    super.onStop();
    Log.d(TAG, "onStop");
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
  }
}

Run, and observe that your log will only contain "onDestroy". Call `finish()` almost anywhere else and you'll see onPause() called.

Problem

Couldn't find a solid answer to this anywhere. I have a method where finish() is being called, and onPause() is called afterward. Is onPause() guaranteed to be called after a call to finish() ?

Original source