即使应用处于后台模式,计时器也应运行

时间:2019-01-29 11:59:39

标签: c# xamarin xamarin.forms xamarin.ios xamarin.android

我不是在使用计时器,而是使用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);
            }
        }
    }

0 个答案:

没有答案