android 中的每一分钟都需要一个后台任务 运行
Need to have one background task to run for every minute in android
在我的一个 android 应用程序中,我需要每分钟 运行 一个任务。它应该 运行 即使应用程序关闭并且设备也处于空闲状态。
- 我试过处理程序,当设备处于活动状态时它工作正常,但当设备处于空闲状态时它不工作。
- 我也尝试过 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();
}
在我的一个 android 应用程序中,我需要每分钟 运行 一个任务。它应该 运行 即使应用程序关闭并且设备也处于空闲状态。
- 我试过处理程序,当设备处于活动状态时它工作正常,但当设备处于空闲状态时它不工作。
- 我也尝试过 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();
}