Xamarin Android计时器问题
早上好,朋友 我创建了一个应用程序,需要在后台每隔X安装一次服务。问题是找不到一个一直在我决定的时间内运行的计时器 我已经尝试过:Handler+SendEmptyMessageDelayed、Handler+PostDelayed、ScheduledThreadPoolExecutor、System.Threading.Timer、System.Timers.Timer、Xamarin.Forms.Device.StartTimer 每个人在没有启动的情况下都有相同的功能,但一段时间后,轮子在不同的时间开始运转。没有测试可以每3分钟运行一次,通常它也会运行两次,然后每5分钟运行一次,然后每10分钟运行一次,然后每15分钟运行一次,否则它就会死掉 有人知道“安全”计时器吗 相同的示例代码:Xamarin Android计时器问题,android,xamarin,timer,xamarin.forms,xamarin.android,Android,Xamarin,Timer,Xamarin.forms,Xamarin.android,早上好,朋友 我创建了一个应用程序,需要在后台每隔X安装一次服务。问题是找不到一个一直在我决定的时间内运行的计时器 我已经尝试过:Handler+SendEmptyMessageDelayed、Handler+PostDelayed、ScheduledThreadPoolExecutor、System.Threading.Timer、System.Timers.Timer、Xamarin.Forms.Device.StartTimer 每个人在没有启动的情况下都有相同的功能,但一段时间后,轮子在
public void StartPeriodicLocationTask()
{
_timeSpan = TimeSpan.FromSeconds(_token.TempoTransmissao);
_handler = new Handler(HandlerCallback);
HandlerCallback(null);
ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(3);
_runnable = new Java.Lang.Runnable(OnRunTask);
scheduled.ScheduleWithFixedDelay(
_runnable
, 0
, _token.TempoTransmissao
, TimeUnit.Seconds
);
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
Timer timer = new Timer(
timerDelegate
, 0
, 0
, (long)_timeSpan.TotalMilliseconds
);
System.Timers.Timer timer2 = new System.Timers.Timer();
timer2.Interval = (long)_timeSpan.TotalMilliseconds;
timer2.Elapsed += OnTimedEvent;
timer2.Enabled = true;
Xamarin.Forms.Device.StartTimer(_timeSpan, () =>
{
DebugText debug = new DebugText(
"Device.StartTimer "
, 7
);
TokenDataBase databaseRunTask = TempDataSource();
databaseRunTask.SaveDebugTextAsync(debug);
return true;
});
}
public static void OnRunTask()
{
DebugText debug = new DebugText(
"ScheduledThreadPoolExecutor "
, 3
);
TokenDataBase databaseRunTask = TempDataSource();
databaseRunTask.SaveDebugTextAsync(debug);
}
public static void HandlerCallback(Message obj)
{
DebugText debug = new DebugText(
"HandlerOnRunTask"
, 4
);
TokenDataBase databaseRunTask = TempDataSource();
databaseRunTask.SaveDebugTextAsync(debug);
}
public static void CheckStatus(Object state)
{
DebugText debug = new DebugText(
"System.Threading.Timer"
, 5
);
TokenDataBase databaseRunTask = TempDataSource();
databaseRunTask.SaveDebugTextAsync(debug);
}
private void OnTimedEvent(
object sender
, System.Timers.ElapsedEventArgs e
)
{
DebugText debug = new DebugText(
"System.Timers.Timer"
, 6
);
TokenDataBase databaseRunTask = TempDataSource();
databaseRunTask.SaveDebugTextAsync(debug);
}
结果:
我试过
系统、线程、计时器
,它工作得非常完美。你能把它分解成一个简单的例子吗?也许是一个用Debug.WriteLine
写出时间的表单?我正在准备一个例子。但是,当手机没有进入深度睡眠时,计时器就会工作。好了,现在我们开始交谈。我真的不明白这个问题是在深度睡眠时发生的。请注意,到目前为止,Oreo Background在Android上受到了极大的限制,即使它现在可以工作,但如果它不是前台服务,它很可能会在Oreo设备上停止工作。我尝试了System.Threading.Timer
,它工作得非常完美。你能把它分解成一个简单的例子吗?也许是一个用Debug.WriteLine
写出时间的表单?我正在准备一个例子。但是,当手机没有进入深度睡眠时,计时器就会工作。好了,现在我们开始交谈。我真的不明白这个问题是在深度睡眠时发生的。请注意,到目前为止,Oreo Background在Android上受到了极大的限制,即使它现在可以工作,但如果它不是前台服务,它很可能会在Oreo设备上停止工作。