Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
Functionally, there's no difference, but testing this out on GenyMotion there appears to be a slight visual difference. See web cast: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing
You would need to try that on a range of devices to see how consistent it is.
Subjectively, I would say go with the finishAffinity()
because it's more explicit. However, if you have to support < SDK 16 you don't really have a choice.
Related videos on Youtube
Craig Russell
I am Craig. I like geeky things like mobiles, programming and man caves. I have a passion for mobile devices, both as a consumer and a developer. I code for iPhones, Android, BlackBerries and Windows Phones, as well as their server-side counterpart services.
Updated on March 09, 2020Comments
-
Craig Russell over 4 years
In Android, if you want to clear your current
Activity
stack and launch a newActivity
(for example, logging out of the app and launching a log inActivity
), there appears to be two approaches.Are there any advantages to one over the other if your target API level is above 16?
1) Finish Affinity
Calling
finishAffinity()
from an Activity. Activity.finishAffinity2) Intent Flags
Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish();
The
finishAffinity()
approach is suitable for >= API 16.The
Intent
flags approach is suitable for >= API 11.To be clear, for the purpose of clearing the current
Activity
stack, both approaches appear to work equally as well. My question is are there are problems with either that people have experienced and, therefore, is there any reason to choose one over the other? -
Craig Russell over 8 yearsThe purpose of both approaches listed in my question is to finish all activities in the current stack without having to call finish() on each one individually. To be clear, as far as I can see, both approaches accomplish this.
-
Craig Russell over 8 yearsThe delay, or flicker, that you mention is initially what made me question finishAffinity(). IIRC, some Samsung devices in particular had a very pronounced flicker when using finishAffinity() but I no longer have the devices to test.
-
brindy over 8 yearsIn this case it was the intent version that had the flicker as per the video.
-
brindy over 8 yearsActually, I'm not sure I'd call it a flicker (based on the vide). There's something definitely different about what happens visually though. finishAffinity looks like it appears on top, the intent version looks like it has "finished" revealing the other one on the top of the stack.
-
Eury Pérez Beltré almost 7 yearsYou have a choice using ActivityCompat.
-
Manuel over 5 years@brindy Too bad the video is not available anymore.