需要在android中每分钟运行一个后台任务
Posted
技术标签:
【中文标题】需要在android中每分钟运行一个后台任务【英文标题】:Need to have one background task to run for every minute in android 【发布时间】:2020-03-21 11:52:01 【问题描述】:在我的一个 android 应用程序中,我需要每分钟运行一个任务。即使应用程序关闭并且设备也处于空闲状态,它也应该运行。
-
我已经尝试过处理程序,当设备处于活动状态时它工作正常,但当设备处于空闲状态时它不工作。
我也尝试过 workmanager(一次并重复)。文档说即使设备处于空闲模式也可以使用,但是在 3/4 重复后停止工作。Workmanager 不一致,它有时会工作,并且在我重新启动设备之前大多数情况下都无法工作。
谁能提出更好的方法来处理这种情况?
谢谢 布瓦那
【问题讨论】:
首先,为什么你需要每分钟运行一次任务,因为它在电池消耗方面成本很高,第二个工作经理需要至少 15 分钟的间隔 我想每分钟将位置发布到服务器 只有前台服务可能是您的解决方案 【参考方案1】:如果您没有定义更长的时间,工作经理只能在 15 分钟的间隔内工作。要每分钟运行一次,您需要一个带有粘性通知的前台服务。没有其他方法可以每分钟运行一次。
要启动前台服务,像往常一样创建一个服务,并在其onStartCommand
中调用startForeground
并从方法中返回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();
【讨论】:
前台服务该怎么办?重复处理程序每分钟重复一次?定期工作请求工作 15 分钟。但我正在尝试使用连续循环的 oneTimeRequest 。 val work = OneTimeWorkRequestBuilder以上是关于需要在android中每分钟运行一个后台任务的主要内容,如果未能解决你的问题,请参考以下文章