#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-код, его легко понять и преобразовать