Xamarin Android计时器问题

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 每个人在没有启动的情况下都有相同的功能,但一段时间后,轮子在

早上好,朋友

我创建了一个应用程序,需要在后台每隔X安装一次服务。问题是找不到一个一直在我决定的时间内运行的计时器

我已经尝试过:Handler+SendEmptyMessageDelayed、Handler+PostDelayed、ScheduledThreadPoolExecutor、System.Threading.Timer、System.Timers.Timer、Xamarin.Forms.Device.StartTimer

每个人在没有启动的情况下都有相同的功能,但一段时间后,轮子在不同的时间开始运转。没有测试可以每3分钟运行一次,通常它也会运行两次,然后每5分钟运行一次,然后每10分钟运行一次,然后每15分钟运行一次,否则它就会死掉

有人知道“安全”计时器吗

相同的示例代码:

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设备上停止工作。