c# - Xamarin Forms-如何获取当前计时器状态并在应用程序关闭并重新打开后继续运行?
问题描述
更新:我已经更准确地提出了这个问题
我用 Xamarin 形式(Android)编写了一个具有计时器的应用程序,并且我在 MainPage.cs 类中编写了所有内容。直到现在,只有当我关闭应用程序(发送到后台)并再次打开它时,一切才能正常工作。问题是,当我再次打开应用程序时,计时器不再运行,而只是在打开应用程序时显示剩余时间。计时器没有运行。我已经读到 Xamarin Forms 在这种情况下调用 OnSleep、OnResume 方法,您应该在那里编程以再次正确检索计时器并继续运行。我对此几乎没有经验,经过长时间的研究也找不到任何好的东西。谁知道打开后如何找回计时器并再次运行。非常感谢你
这是我在 MainPage 中的计时器方法
public void StartCountdown()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
if (cancel == true)
{
tokenSource.Cancel();
}
task = Task.Run(async () =>
{
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
restTime -= TimeSpan.FromSeconds(1);
if (cancel == true)
{
return false;
}
if (restTime == zero)
{
StartDownload();
return false;
}
else
{
Device.BeginInvokeOnMainThread(() =>
{
ActivateElements(false);
});
return true;
}
});
}, token);
}
如何在 App.cs 中实现 timer 方法,是否有必要?
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override void OnStart()
{
}
protected override void OnSleep()
{
}
protected override void OnResume()
{
}
}
解决方案
在您的页面中创建公共方法以暂停/恢复计时器,然后在您的 App 类中
protected override void OnSleep()
{
((MainPage)MainPage).SomePublicMethodToPauseTimer();
}
protected override void OnResume()
{
((MainPage)MainPage).SomePublicMethodToResumeTimer();
}
推荐阅读
- javascript - 如屏幕截图所示,如何获取“更改”按钮的 Xpath?
- asynchronous - 如何手动实现固定的自引用结构?
- excel - 使用条件格式 (countifs) 在多个工作表 (28,29,30,31) 上查找重复项
- controller - vJoy 和 vXBox 有什么区别?
- reactjs - React useEffect 没有来自 Context API 的更新状态数据
- rubygems - Rails:SimpleCov 退出 1 失败 - 如何解决这个问题
- r - 从同一包中的 R 代码调用 Rcpp c++ 函数
- kframework - 如何在 kframework 的一个规则中“要求”两件事?
- excel - 有没有办法克服 VBA 中随意的编辑导航?
- matlab - 以指定概率随机选择两个选项之一