c# - 即使应用程序处于后台模式,计时器也应该运行
问题描述
我使用的不是计时器而是 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);
}
}
}
解决方案
推荐阅读
- python - 使用selenium和python根据给定的xpath提取动态webtable列中的对应值
- codeblocks - 尝试设置 code::blocks 深色主题。错误 - 无法初始化 gtk,DISPLAY 是否设置正确?
- php - 如何设置 .htaccess 以从 URL 中删除文件夹名称和 index.php?
- java - android中的自定义DayView
- excel - 使用 Excel VBA 将字符串转换为日期
- r - 带有传单地图的 R Shiny 仪表板:我的第二个选项卡上的图像查询功能不起作用
- java - 如何使用 ResponseBodyAdvice 响应不带双引号的字符串正文数据?
- javascript - 如何从视频标签的媒体播放器中删除/隐藏仅播放/暂停图标/按钮
- elasticsearch - 通配符查询查询中带有正斜杠的数组
- javascript - Select2 - 防止在更改时清除模板