Finish old activity and start a new one or vice versa

I know, that I get the same result with both code snippets

finish();
startActivity(newActivity);

and

  • Custom CheckBox image gets cut off
  • Change color of progress bar in android
  • Modifying the Android seekbar widget to operate vertically
  • How I can get the mime type of a file having its Uri?
  • Communication between BroadcastReceiver and Activity - android
  • Why dont Android applications provide an “Exit” option?
  • startActivity(newActivity);
    finish();
    

    I’d like to know your opinion, if there is a big difference between them. Is one better than the other? If so, why?

    Related posts:

    Difference between Dagger and ButterKnife Android
    How to know whether a RecyclerView / LinearLayoutManager is scrolled to top or bottom?
    android: determining a symbolic link
    Dismissing DialogFragment programmatically
    Android: Let user pick image or video from Gallery
    Custom FragmentDialog with round corners and not 100% screen width
  • How to make Canvas draw area transparent in android?
  • Best way to run Robolectric tests on Android device
  • how to know key presses in edittext
  • Adapter with hasStableIds using GUIDs or Strings as Ids
  • RxJava pattern for requesting a remote Observable with a temporary cache
  • Firebase Cloud Messaging API Key
  • 6 Solutions collect form web for “Finish old activity and start a new one or vice versa”

    When you do startActivity(), all that does is post your intent in a queue of events. The actual starting of the activity happens asynchronously in the near future. So I don’t see a big difference between the two.

    The animation is clearly different (at least on 4.1 onwards). Calling finish() first starts to fade away the first activity earlier and you can briefly see a black background before the new activity fades in. Calling startActivity() first fades in the new activity on top of the old one and the black background is not visible.

    I would do the second choice, I’m not backing this on anything that I have looked up from official sources, but, it makes more sense to launch the new activity before you call finish, that way the new activity pops up via an intent, and the now background activity can call all its cleaning up methods.

    If you were to do it the other way around, maybe the intent wont have time to fire before the cleaning up is done. I.e. will the activity call startActivity() after the finish() call?

    I hope you understand what I’m trying to state, I would do the second option just to be safe.

    In addition to the Emmanuels answer:

    Both methods startActivity and finish will be scheduled after the end of the invoking method, since both are processed by the UI thread.

    I had the similar issue:

    Activity A: singleInstance
    Activity B: singleInstance
    Activity C: singleInstance
    
    A starts B 
    B starts C
    C wants to start A:
    

    here if I use:

    finish();
    startActivity(A);
    

    something wired happens: Activity B comes to foreground instead of A!
    but if I change the code like this:

    startActivity(A);
    finish();
    

    everything seems ok and Activity A comes visible.

    I don’t know what’s the problem, but it seems that in the first case, C is finished before executing the startActivity command so that the back stack handles the situation and shows its top activity which is B!
    but in the second case, everything happens normally.

    I usually do startActivity() before finish() as I think that’d make sure the new screen comes out before the previous goes out.

    I have a login page in my app. After user login successfully, the login activity is gone and main activity is up. It works fine in the Android 4.

    Today I wanted to rewrite it in Material design. However, I got a big problem. New Android studio creates blank activity with material design which I think takes many resources. The same process, but I got the error

    11-26 18:20:44.450 18397-18397/? I/Choreographer: Skipped 42 frames!  The application may be doing too much work on its main thread.
    11-26 18:20:44.485 18397-18408/? I/art: Background partial concurrent mark sweep GC freed 2864(191KB) AllocSpace objects, 4(43MB) LOS objects, 13% free, 100MB/116MB, paused 8.056ms total 39.767ms
    

    It said my apps takes many resources when mainActivity starts in my phone logcat. I have nothing in mainActivity just that it is the default Material Design layout.

    I reversed the order and now it works without error on my phone.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.