需要在Android中每分钟运行一次后台任务

时间:2019-11-26 05:48:35

标签: android android-workmanager android-background android-doze

在我的一个Android应用程序中,我需要每分钟运行一次任务。即使应用程序关闭并且设备也处于空闲状态,它也应运行。

  1. 我尝试过处理程序,当设备处于活动状态时它可以正常工作,但是在设备处于空闲状态时则不能工作。
  2. 我也尝试过workmanager(一次又一次)。文档说即使在设备处于空闲模式下也能正常工作,但是在重复3/4次后仍无法工作。Workmanager不一致,有时会工作,直到重新启动设备后大多数情况下才工作。

有人可以建议更好的方法来处理这种情况吗?

谢谢 布瓦纳

1 个答案:

答案 0 :(得分:0)

如果未定义更长的时间,则工作管理器只能在间隔15分钟内工作。要每分钟运行某些内容,您需要一个前台服务,其中带有粘性通知。每分钟都没有其他方法可以运行某事。

要启动前台服务,请照常创建服务,并在其onStartCommand中调用startForeground,然后从方法中返回START_STICKY。这些应该可以满足您的需求。

编辑:处理程序线程的示例代码(这是Java btw,在Xamarin上应该类似):

private HandlerThread handlerThread;
private Handler backgroundHandler;

@Override
public int onStartCommand (params){

    // Start the foreground service immediately.
    startForeground((int) System.currentTimeMillis(), getNotification());

    handlerThread = new HandlerThread("MyLocationThread");
    handlerThread.setDaemon(true);
    handlerThread.start();
    handler = new Handler(handlerThread.getLooper())

    // Every other call is up to you. You can update the location, 
    // do whatever you want after this part.

    // Sample code (which should call handler.postDelayed()
    // in the function as well to create the repetitive task.)
    handler.postDelayed(() => myFuncToUpdateLocation(), 60000);

    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    handlerThread.quit();
}