Перезапустите Xamarin.Приложение для Android после смерти процесса

#android #xamarin.android #mvvmcross

Вопрос:

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

В моей базовой активности я переопределяю OnSaveInstanceState(Bundle outState) метод, в котором я сохраняю идентификатор процесса до того, как система убьет процесс

 protected override void OnSaveInstanceState(Bundle outState)
{
    outState.PutInt(PROCESS_ID, Process.MyPid());
    base.OnSaveInstanceState(outState);
}
 

В OnCreate я проверяю текущий идентификатор процесса и процесс, сохраненный в пакете:

 if (savedInstanceState != null)
{
    var currentPID = Process.MyPid();

    if (currentPID != savedInstanceState.GetInt(PROCESS_ID))
    {
         var intent = new Intent(ApplicationContext, typeof(SplashScreen));
         intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);
         StartActivity(intent);
         Finish();
    }
}

 

Такой подход не является полезным. Мое приложение все равно вылетает.

Я просто хочу перезапустить свое приложение с экрана. Пожалуйста, предоставьте мне фрагмент кода, чтобы правильно перезапустить приложение.

Ответ №1:

Да,в Android, начиная с Android 8.0 (уровень API 26), приложение для Android больше не имеет возможности свободно работать в фоновом режиме. Для получения более подробной информации об этом вы можете обратиться к документу: Ограничения фонового выполнения в Android 8.0.

Но вы можете попытаться перезапустить службу, как только она будет завершена получателем широковещательной передачи . Функция BroadcastReceiver заключается в получении сигнала, когда кто-то или что-то убивает службу; его роль заключается в перезапуске службы.

Для получения более подробной информации вы можете прочитать полезную статью, введя ключевые Creating a never ending background service in Android слова в своем браузере. Хотя это Java-код, его легко понять и преобразовать