Restarting Android app programmatically

android, android-intent

Solution

If you just consider to switch to your starting `Activity`, refer to Ricardo's answer. But this approach won't reset static context of your app and won't rebuild the `Application` class, so the app won't be really restarted.

If you want to completely restart your app, I can advise more radical way, using `PendingIntent`.

private void restartApp() {
    Intent intent = new Intent(getApplicationContext(), YourStarterActivity.class);
    int mPendingIntentId = MAGICAL_NUMBER;
    PendingIntent mPendingIntent = PendingIntent.getActivity(getApplicationContext(), mPendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager mgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
    System.exit(0);
}

P.S. Tried your code in my project - works well with and without `finish()`. So maybe you have something specific about your Activity or Fragment, you haven't written.

Problem

This is a follow up question to this question: Force application to restart on first activity I am trying to restart my application from a fragment like that: ``` Toast.makeText(getActivity(), "Restarting app", Toast.LENGTH_SHORT).show(); Intent i = getActivity().getBaseContext().getPackageManager() .getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName() ); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); getActivity().finish(); ``` The code does nothing. The `finish()` is the only thing working for some reason. If I remove the `finish()`, nothing happens. Why is that?

Original source

Related problems