Close application and remove from recent apps/

Hamad picture Hamad · Mar 4, 2014 · Viewed 56.2k times · Source

I know this question is common and asked many times on Stack Overflow, but after visiting nearly the four pages of search engine results and nearly the 20 question of Stack Overflow regarding this issue, I found that none of them is resolved or answered correctly.

What I want:

I want to show my app in recent apps list when it is running but when I close app then my process should be killed and application should be removed from recent apps list.

Some answers I found:

use System.exit(0); //doesn't clear app from recents
OR
use android.os.Process.killProcess(android.os.Process.myPid()); //doesn't clear app from recents
OR
use finish() or this.finish() or Activity.finish();// doesn't clear app from recents

And one common suggestion I see in every answer that add below code in manifest:

android:excludeFromRecents //I think this is wrong approach.

because after adding this when user presses home button while my app is running then user cannot see my app in recent Apps List.

And many other suggestions on this but none of them do both tasks close application and clear application from recent apps list. Also if you go in Settings>Apps>yourApp>your Application see that still it asks for "force stop" means application is running!

Answer

Luke picture Luke · Jan 28, 2015

I based my solution on guest's above, as well as gilsaints88's comments below (for Android L compatibility):

Add this activity to your AndroidManifest.xml file:

<activity
    android:name="com.example.ExitActivity"
    android:theme="@android:style/Theme.NoDisplay"
    android:autoRemoveFromRecents="true"/>

Then create a class ExitActivity.java:

public class ExitActivity extends Activity
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if(android.os.Build.VERSION.SDK_INT >= 21)
        {
            finishAndRemoveTask();
        }
        else
        {
            finish();
        }
    }

    public static void exitApplication(Context context)
    {
        Intent intent = new Intent(context, ExitActivity.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

        context.startActivity(intent);
    }
}

Then whenever you want to force close your application and remove it from the recent's list, call:

ExitActivity.exitApplication(context);

This solution works for me instead of declaring android:excludeFromRecents="true" because I want the user to be able to see the app in the recents list UNTIL the point where my app triggers closing the app programmatically.