Я разрабатываю приложение, и мне нужно знать, когда приложение останавливается, закрывается, закрывается, что-то прерывает его, чтобы остановить некоторые службы, такие как WebSocket. Как я могу получить «доступ» к этим событиям?

Благодарность!

1
Emixam23 22 Дек 2017 в 20:45

1 ответ

Лучший ответ

Я проверил следующее на небольшом примере. (Протестировал его на UWP и работает, вызывается OnSleep () , когда я закрываю приложение). Метод OnSleep () , который можно переопределить в App.xaml.cs, - это метод, который вы ищете.

Xamarin Application LifeCycle предлагает несколько методов для вашего потребности.

OnStart - Called when the application starts.

OnSleep - Called each time the application goes to the background.

OnResume - Called when the application is resumed, after being sent to the background.

Обратите внимание, что не существует способа прекращения работы приложения . Под нормальным обстоятельства (т.е. не сбой) завершение работы приложения произойдет из состояния OnSleep, без каких-либо дополнительных уведомлений на ваш код.

Примере:

using System;
using System.Diagnostics;
using Xamarin.Forms;

namespace App1
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            if (Device.RuntimePlatform == Device.iOS)
                MainPage = new MainPage();
            else
                MainPage = new NavigationPage(new MainPage());
        }

        protected override void OnStart() {
            Debug.WriteLine("OnStart");
        }
        protected override void OnSleep() {
            Debug.WriteLine("OnSleep");
        }
        protected override void OnResume() {
            Debug.WriteLine("OnResume");
        }
    }
}

Обновить

Согласно this, вы должны перехватывать необработанные исключения в собственном коде. Это немного усложняет завершение работы ваших сервисов.

Примере:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity {
        protected override void OnCreate(Bundle bundle) {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App());
        }

        private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) {
            //crashed by exception
        }
    }

Дополнительная информация о необработанных исключениях: здесь

2
Tobias Theel 22 Дек 2017 в 19:05