Android с Xamarin - Как запустить код, когда пользователь закрывает приложение?
Я нашел несколько вопросов / ответов о том, как отслеживать, когда приложение переходит в фоновый режим, например: Запуск кода, когда приложение Android закрыто / отправлено в фоновый режим.
Но мне нужно запускать код, только если пользователь на самом деле закрывает приложение.
В качестве примера:
- Пользователь нажимает кнопку Обзор;
- Android открывает список миниатюрных изображений последних приложений;
- Пользователь проведет пальцем по эскизу моего приложения, чтобы удалить его (здесь я должен выполнить код).
Я пытался добавить код в OnDestroy()
метод, но он, кажется, не вызывается, когда я делаю шаги выше. Я знаю, что код работает, потому что я сделал тест, где я называю Finish()
в самом начале моего OnCreate()
тогда OnDestroy()
называется и так мой код.
Я использую Xamarin и MvvmCross, но Java-код тоже приветствуется.
2 ответа
Внедрить и зарегистрировать экземпляр Android.Content.IComponentCallbacks2
и слушать TrimMemory.UiHidden
События:
LifecycleCallbacks:
public class LifecycleCallbacks : Java.Lang.Object, Android.Content.IComponentCallbacks2
{
public void OnTrimMemory(TrimMemory level)
{
if (level == TrimMemory.UiHidden)
{
Console.WriteLine("Backgrounded...");
}
}
public void OnConfigurationChanged(Configuration newConfig)
{
}
public void OnLowMemory()
{
}
}
Регистрация экземпляра LifecycleCallbacks
:
[Activity (Label = "MyApp", MainLauncher = true)]
public class MainActivity : Activity
{
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
// ...
Application.RegisterComponentCallbacks(new LifecycleCallbacks());
// ...
}
}
Родной разработчик Android здесь, я не уверен, что Xamarin расширяет родной фреймворк, делая это возможным, но изначально он в настоящее время не поддерживается.
ОС не обязательно называет деятельность onDestroy
метод, когда приложение убито, но когда активность убита. Это действительно отличается, потому что приложение может быть убито без вызова деятельности " onDestroy
и onDestroy
можно вызвать без уничтожения приложения.
Я рекомендую обратиться к службам и диспетчеру аварийных сигналов, чтобы фактически отслеживать, когда это происходит, в сочетании с onDestroy
а также onPause
методы. Точность в этом случае будет так хороша, как вы хотите. Вы можете вызывать сигнал тревоги каждую минуту, например, чтобы проверить его, или запустить фоновую службу в своем собственном процессе, который останется активным после закрытия приложения.
Об этом есть всесторонняя дискуссия в другом вопросе. Речь идет о нативном коде, но объяснение проблемы очень полезно для понимания границ фреймворка.