Перезапуск приложения 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(), ничего не произойдет. Почему это так?
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