当我的应用程序进入后台时,计时器启动(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并且计时器被杀死。
我希望我写下所需的一切,只是为了裁员,我想在用户恢复应用时杀死计时器。
感谢。