如何停止计时器/更改系统UI OnSleep Xamarin Android

时间:2018-12-13 18:15:55

标签: c# android xamarin xamarin.forms messagingcenter

因此,我有一个按下按钮的应用程序:启动计时器,循环显示一个(++)数据,并隐藏开始按钮,而是显示停止按钮和下一个按钮。 我调查了消息传递中心,并认为它正在解决问题(这里是链接Xamarin.Forms how do I access a public function from another CS file?),但并不能完全解决问题。

如果应用程序正在运行计时器(又名“开始”按钮),然后通过按手机上的“主页”按钮来中断该过程,则该应用程序运行良好,并且该应用隐藏了“停止/下一步”按钮并显示了“开始”按钮并停止计时器。如果您根本没有启动该过程(也没有按下开始按钮),并且您按下了手机上的主页按钮,则该应用程序将引发异常错误,因为我正在使用消息传递中心进行的更改“不需要改变,因为它从未改变”。有没有更好的方法来处理这种情况?

我可以在Messenger中心的应用程序状态下使用if / else语句吗?我被卡住了。

App.xaml.cs

protected override void OnSleep()
    {
        // Handle when your app sleeps
        Debug.WriteLine("~~~~~~~~~~~~~~OnSleep~~~~~~~~~~~~~");
        MessagingCenter.Send<App>(this, "OnSleep");
    }

MainPage.xaml.cs

MessagingCenter.Subscribe<App>(this, "OnSleep", (sender) => {
            //shows start button instead of stop button
            StartGrid.IsVisible = true;
            //hides stop button
            StopNextGrid.IsVisible = false;

            //stops timer
            timer.Stop();
            timer = null;
            //stops sound
            startSound.Stop();
            stopSound.Play();
        });

1 个答案:

答案 0 :(得分:1)

仅能看到部分代码,您应该在执行该方法之前检查计时器是否已初始化

如果不单击开始按钮,则需要检查@Insert(onConflict = OnConflictStrategy.REPLACE) fun insertReplace(user: User) @Insert(onConflict = OnConflictStrategy.IGNORE) fun insertIgnore(user: User) 是否已初始化,以便执行以下计时器操作。

是否不知道计时器是否已初始化。您可以尝试:

修改通知处理方法。如果计时器和按钮的状态未更改,则无需在通知中做任何事情。在这里,我使用timer作为判断。

timer