Как полностью перезапустить приложение?

У меня есть приложение, которое запускает удаленную службу в первом запущенном действии. Затем в другом действии пользователь может установить конфигурацию приложения. Обратите внимание, что это второе действие не связано с Сервисом, и я не хочу его связывать.

Теперь мой вопрос: как я мог перезапустить все приложение из второго действия после изменения настроек конфигурации?

На данный момент я использую кнопку, которая является onClickListener:

public void onClick(DialogInterface dialog, int which) { sauvegarde(); Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } 

Проблема в том, что она только перезапускает текущую деятельность, не закрывая все приложение, и, следовательно, без перезапуска службы

Есть идеи?

Вы можете использовать AlarmManager системы Androids следующим образом:

Код для перезапуска приложения в вашей деятельности:

 AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags())); System.exit(2); 

Здесь можно посмотреть пример

ОБНОВИТЬ

Как отметил @CommonsWare, это плохой способ разработки вашего приложения, когда вам нужно перезапустить его (плохая практика). Если вы действительно хотите это сделать, вы можете попробовать настроить будильник, чтобы запустить приложение через секунду после того, как вы убили свой собственный процесс:

 AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags())); android.os.Process.killProcess(android.os.Process.myPid()); 

попробуй это

  public void reload() { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); } 

Попробуйте этот код,

 public void onClick(DialogInterface dialog, int which) { sauvegarde(); restart(2); } 

Метод перезапуска

 public void restart(int delay) { Intent launchIntent = new Intent(context, YourStartUpActivity.class); PendingIntent intent = PendingIntent.getActivity(getApplicationContext(), 0, launchIntent , 0); AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); manager.set(AlarmManager.RTC, System.currentTimeMillis() + delay, intent); System.exit(2); } 

В вашем действии перезагрузки добавьте это

 restart.this.finish(); getActivity(otheractivity.class).finish(); Intent in = new Intent(this,main.class); startActivity(in); 

Для каждой вашей активности добавьте getactivity (yourclassname), а затем завершите операцию. Если вы добавите все свои действия, как это, ваше приложение закроется и перезапустится

Решение AlarmManager не может работать, потому что при AlarmManager приложения все отложенные намерения могут быть удалены. На андроиде-10 у меня есть эта проблема.

Но я нашел другой путь – создайте класс Instrumentation и вызовите startInstrumentation в Context . Работал очень хорошо.

Boolean android.content.Context.startInstrumentation (ComponentName className, String profileFile, аргументы Bundle)

Начните выполнение класса android.app.Instrumentation. Данный компонент Instrumentation будет запущен путем уничтожения его целевого приложения (если он выполняется в настоящее время), запуска целевого процесса, создания экземпляра компонента инструментария и последующего включения приложения.

Эта функция не является синхронной – она ​​возвращается, как только прибор запускается и во время работы.

Инструментарий, как правило, разрешается запускать только против пакета, который либо без знака, либо подписан с подписью, к которой также подписан подписной пакет (с целью обеспечения целевого доступа к инструментарию).

Instrumentation должен быть определен в манифесте. Google, как использовать его.