Перезапуск приложения Android программно



Это следующий вопрос к этому вопросу:



Принудительно перезапустить приложение при первом действии



Я пытаюсь перезапустить приложение из такого фрагмента:



    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();


Код ничего не делает. finish() - это единственное, что работает по какой-то причине. Если я удалю finish(), ничего не произойдет. Почему это так?

1278   6  

6 ответов:

Если вы просто подумываете переключиться на свой начальный Activity, обратитесь к у Рикардо отвечай. Но этот подход не сбросит статический контекст вашего приложения и не перестроит класс Application, поэтому приложение не будет действительно перезапущено.

Если вы хотите полностью перезапустить свое приложение, я могу посоветовать более радикальный способ, используя 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. попробовал ваш код в моем проекте-хорошо работает с finish() и без finish(). Так что, может быть, у вас есть что-то конкретное о Вашей деятельности или фрагмент, который вы не написали.

Как только вы добавите это FLAGSк намерению

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

И вызов startActivity(), он очистит все другие действия, включая то, из которого вы вызываете это, поэтому вызов finish() после startActivity() закроет начатое действие.

В основном, удалить getActivity().finish().

Пожалуйста, смотрите ниже код

    Intent intent = new Intent(this, YourHomeActivity.class);
    this.startActivity(intent);
    this.finishAffinity();
Это начало вашей домашней деятельности и отказ от всех других видов деятельности. Это выглядит как перезагрузка для пользователей, но процесс тот же самый.

Попробуйте вот это

 Intent intent = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName() );
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                    android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(0);
Intent i = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);

Вы можете обратиться к предыдущему обсуждению (Нажмите здесь)

Попробуйте использовать следующие строки:

Intent i = getBaseContext().getPackageManager()
                .getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
ActivityCompat.finishAfterTransition(YourCurrentActivity.this);

ActivityCompat.finishAfterTransition (YourCurrentActivity.this); эта строка очищает экземпляр после создания другого действия

Comments

    Ничего не найдено.