Как остановить таймер / изменить системный интерфейс OnSleep Xamarin Android
Итак, у меня есть приложение, которое при нажатии кнопки: запускает таймер, циклически перебирает один (++) фрагмент данных, скрывает кнопку запуска и вместо этого показывает кнопку "Стоп" и "Далее". Я заглянул в центр сообщений и подумал, что это исправляет проблему (вот ссылка Xamarin. Формы, как мне получить доступ к публичной функции из другого файла CS?), Но это не решило проблему полностью.
Если в приложении работает таймер (иначе вы нажимаете кнопку "Пуск"), а затем прерываете процесс, нажимая кнопку "Домой" на вашем телефоне, приложение работает нормально, и приложение скрывает кнопки "Стоп / Вперед", показывает кнопку "Пуск" и останавливает таймер. Если вы вообще не запустили процесс (иначе вы не нажали кнопку "Пуск") и нажали кнопку "Домой" на своем телефоне, приложение выдает ошибку исключения, потому что то, что я изменяю с помощью центра сообщений "не нужно" меняется, потому что он никогда не менялся ". Есть ли лучший способ справиться с этой ситуацией?
Могу ли я использовать операторы if / else в состоянии приложения с Messagingcenter?? Я застрял.
App.xaml.cs
protected override void OnSleep()
{
// Handle when your app sleeps
Debug.WriteLine("~~~~~~~~~~~~~~OnSleep~~~~~~~~~~~~~");
MessagingCenter.Send<App>(this, "OnSleep");
}
MainPage.xaml.cs
MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
//shows start button instead of stop button
StartGrid.IsVisible = true;
//hides stop button
StopNextGrid.IsVisible = false;
//stops timer
timer.Stop();
timer = null;
//stops sound
startSound.Stop();
stopSound.Play();
});
1 ответ
Просто можете увидеть частичный код, вы должны проверить, инициализирован ли ваш таймер перед выполнением метода.
Если вы не нажмете кнопку "Пуск", вам необходимо проверить, timer
инициализируется, чтобы выполнить следующую операцию таймера.
Если не хотите знать, инициализирован ли таймер. Вы можете попробовать это:
Измените метод обработки уведомлений. Если состояние вашего таймера и кнопки не изменилось, вам ничего не нужно делать в уведомлении. Здесь я использую timer
как суждение.
MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
//shows start button instead of stop button
if (null != timer)
{
StartGrid.IsVisible = true;
//hides stop button
StopNextGrid.IsVisible = false;
//stops timer
timer.Stop();
timer = null;
//stops sound
startSound.Stop();
stopSound.Play();
}
});