Android - System.exit (0) и перезапустите активность и службу - PullRequest
1 голос
/ 26 апреля 2019

Я делаю приложение для Android, и мне нужно полностью перезапустить приложение через минуту.Таким образом, чтобы сделать это, единственное решение, которое сработало (и я помню), это использовать System.exit (0).Я понятия не имею, почему у меня есть этот код там (я не могу вспомнить, почему я попробовал его или где я видел его, или если это был просто несчастный случай), но я знаю, что он работает, и я теперь, когда я просматривал код дляприменить это к службе, она не запустила желаемое действие (действие, которое полностью остановит приложение и перезапустит службу с нуля - или службу, которая будет делать то же самое, но служба не вызывается и недействие, поэтому я не знаю, работает ли оно, вызывая службу или нет - действие, которое я знаю, что оно работает, по крайней мере, из другого действия):

  • MainActivity.java (в пункте Iхочу перезапустить его)
Intent MainRestarter= new Intent();
MainRestarter.setClass(MainActivity.this, MainRestarter.class);
MainRestarter.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainRestarter.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(MainRestarter);
System.exit(0);
  • MainRestarter.java
Intent MainActivity = new Intent();
MainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
MainActivity.setClass(MainRestarter.this, MainActivity.class);
startActivity(MainActivity);
finish();

Но я проверял, и он тоже работает с:

  • MainActivity.java (в точке, где я хочу его перезапустить)
Intent MainActivity = new Intent();
MainActivity.setClass(MainActivity.this, MainActivity.class);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
MainActivity.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(MainActivity);
System.exit(0);

Из ответа в другом потоке ( Разница между finish () и System.exit (0)):

"System.exit (0) - перезапускает приложение с одним меньшим количеством активТы в стеке.Итак, если вы вызвали ActivityB из ActivityA, а System.exit (0) вызван в ActivityB, то приложение будет сразу же убито и запущено только с одним действием ActivityA "- разница здесь в том, что (используя имена там) я вызываюActivityB из ActivityA, а затем я вызываю System.exit (0) для ActivityA, и он перезапускается с ActivityB, но это не работает со службой, не знаю почему ...

Я думал, что это должно простоостановите все приложение, но после прочтения этого ответа я запутался. Кстати, он работает только в том случае, если я вызываю startActivity (), или приложение полностью закрывается. Может кто-нибудь объяснить мне, почему работает этот код, а затем объяснить, почемуэто не сработает, если я попробую точно такой же код в Службе?

Заранее спасибо!

РЕДАКТИРОВАТЬ: я знаю, что могу сделать это с помощью AlarmManager до System.exit (0),но я просто хотел бы знать, почему это работает, и если я могу продолжать использовать его вместо AlarmManager (на MainActivity, так как на службе, по какой-то причине вышене работает, и я хотел бы также знать, почему, если кто-нибудь знает), потому что я читал, что это потребляет больше батареи.

...