Xamarin Forms-如何在应用程序关闭并重新打开后获取当前计时器状态并继续运行?

时间:2021-05-24 16:35:00

标签: c# android xamarin 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 中实现定时器方法,有必要吗?

public partial class App : Application
{

    public App()
    {
   
        InitializeComponent();

        MainPage = new MainPage();
    }

    protected override void OnStart()
    {
       
    }

    protected override void OnSleep()
    {

    }

    protected override void OnResume()
    {
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

protected override void OnResume()
{
   ((MainPage)MainPage).SomePublicMethodToResumeTimer();
}
相关问题