c#Xamarin Android后台计时器配置

时间:2016-10-16 11:29:22

标签: c# android xamarin timer background

当我的应用程序进入后台时,计时器启动(OnStop()覆盖)

这次只需每10秒执行一次查询。

如果结果为“x”,则为我创建通知,并配置计时器。现在我可以点击通知或恢复应用。

但如果我想使用App恢复它,它会陷入“停止”布局,我看到计时器不会死(从控制台)。

我试图在OnResume()OnStart()OnRestart()停止播放,但这些都没有被调用,计时器仍然会崩溃。

我很确定我在后台检查数据库更新的方式非常糟糕,但我想用这种方式。

时间是这样的:

public class TimerExampleState
    {
        public int counter = 0;
        public Timer tmr;
    }
protected override void OnStop()
        {
            base.OnStop();
            GlobalVar.KillTimer = 0;
            StuffInStop();
        }
public void StuffInStop()
        {

                TimerExampleState s = new TimerExampleState();
                TimerCallback timerDelegate = new TimerCallback(CheckStatus);
                Timer timer = new Timer(timerDelegate, s, 1000, 10000);
                s.tmr = timer;

                while (s.tmr != null)
                    Thread.Sleep(0);


        }


public async void CheckStatus(Object state)
        {
            TimerExampleState s = (TimerExampleState)state;
            s.counter++;
            if (s.counter == 2)
            {
                int x = await AsyncIntCheck();
                if (GlobalVar.KillTimer == 1)
                {
                    Console.WriteLine("disposing of timer...");
                    s.tmr.Dispose();
                    s.tmr = null;
                }
                s.counter = 1;
            }
        }

AsyncIntCheck是检查更新的函数(它是一个int函数,因为它稍后会返回更新部分的数量)。

你可以想象我有一个全局int,当我创建通知时,我将GlobalVar.KillTimer设置为1并且计时器被杀死。

我希望我写下所需的一切,只是为了裁员,我想在用户恢复应用时杀死计时器。

感谢。

0 个答案:

没有答案