android 中的每一分钟都需要一个后台任务 运行

Need to have one background task to run for every minute in android

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

  1. 我试过处理程序,当设备处于活动状态时它工作正常,但当设备处于空闲状态时它不工作。
  2. 我也尝试过 workmanager(一次又一次)。文件说即使设备处于空闲模式也能正常工作,但在 3/4 repeats.Workmanager 不一致后它会停止工作,它有时会工作并且在大多数情况下都不会工作,直到我重新启动设备。

谁能提出更好的处理方法?

谢谢 佛陀

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

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

编辑:处理程序线程的示例代码(这是 Java 顺便说一句,在 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();
}