首页 > 解决方案 > 即使应用程序处于后台模式,计时器也应该运行

问题描述

我使用的不是计时器而是 for 循环来显示 59 秒的计时器,当它为 0 时,它将导航到父屏幕。这是我的代码

问题在于 Android 和 iOS 设备,当我将应用程序置于后台模式时,它会从 59 秒重新启动时间。我想要的是,如果用户将应用程序置于后台模式,例如,当计时器为 40 秒时,如果用户将应用程序置于前台模式,则在 10 秒后再次显示,计时器应显示 30 秒。计时器不应该重新启动。奇怪的是有时它可以正常工作。

在我的 OnAppearing 方法中

 protected override void OnAppearing()
  {
        base.OnAppearing();
        var dd = (EmployeePunchScreenModel)this.Content.BindingContext;
        dd.IsbreakLoopTimer = false;
        dd.SavedDuration = true;
        Initialization = dd.ShowingTimer(59);   
   } 

在 ViewModel 类中 -

 public async Task ShowingTimer(int second)
    {
        for (int _minute = 1; _minute >= 0; _minute--)
        {
            for (int _second = second; _second >= 0; _second--)
            {
                if (!SavedDuration)
                {
                    break;
                }
                if (_second < 10)
                {
                    TimerSec = Convert.ToString("0" + _second);
                }
                else
                {
                    TimerSec = Convert.ToString(_second);
                }
                if (_second == 0)
                {
                    ShouldRun = false;
                    IsbreakLoopTimer = true;
                    await App.Current.MainPage.Navigation.PopModalAsync();
                    MessagingCenter.Send<EmployeePunchScreenModel, string>(this, Constants.Global.NOTIFY_PUNCHCALL, "FromEmpPunchViewModel");
                    return;
                }
                if (_second <= 19)
                {
                    TimerColor = "#FD3A2D";
                }
                else
                {
                    TimerColor = "#000000";
                }
                if (IsbreakLoopTimer)
                {
                    break;
                }

                await Task.Delay(1000);
            }
        }
    }

标签: c#xamarinxamarin.formsxamarin.iosxamarin.android

解决方案


推荐阅读