首页 > 解决方案 > 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()
    {
    }
}

标签: c#androidxamarinxamarin.forms

解决方案


在您的页面中创建公共方法以暂停/恢复计时器,然后在您的 App 类中

protected override void OnSleep()
{
   ((MainPage)MainPage).SomePublicMethodToPauseTimer();
}

protected override void OnResume()
{
   ((MainPage)MainPage).SomePublicMethodToResumeTimer();
}

推荐阅读