Java Android-每15分钟运行一次后台任务,即使应用程序未运行
我需要构建一个每10/15分钟运行一次的后台任务(其实并不重要,也很好),即使应用程序没有运行 我怎样才能做到这一点?我似乎无法理解这件事 我读到我可以使用某种runnable()功能,或者使用后台服务或AlarmManager。我考虑的是后台服务,因为它也必须在应用程序本身不运行时完成Java Android-每15分钟运行一次后台任务,即使应用程序未运行,java,android,service,repeat,Java,Android,Service,Repeat,我需要构建一个每10/15分钟运行一次的后台任务(其实并不重要,也很好),即使应用程序没有运行 我怎样才能做到这一点?我似乎无法理解这件事 我读到我可以使用某种runnable()功能,或者使用后台服务或AlarmManager。我考虑的是后台服务,因为它也必须在应用程序本身不运行时完成 做这件事的更好方法是什么?我该如何做?您已经确定了执行一段代码的时间(间隔),最好使用它,因为它更节能。如果你的应用程序需要收听某种事件,那么服务就是你所需要的 public static void regis
做这件事的更好方法是什么?我该如何做?您已经确定了执行一段代码的时间(间隔),最好使用它,因为它更节能。如果你的应用程序需要收听某种事件,那么服务就是你所需要的
public static void registerAlarm(Context context) {
Intent i = new Intent(context, YOURBROADCASTRECIEVER.class);
PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0);
// We want the alarm to go off 3 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 3 * 1000;//start 3 seconds after first register.
// Schedule the alarm!
AlarmManager am = (AlarmManager) context
.getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
600000, sender);//10min interval
}
报警管理器(系统服务)与带内部报警实施的远程服务(单独流程)对比
报警管理器是您的选择,因为它已经具备了您所需的功能,您只需设置报警间隔您还可以通过SyncAdapter实现这一点 这里有一个样本供您参考和启发
最佳方法是在2018年谷歌I/O大会上推出的
您可以找到文档。工作管理器实际上是定期重复的最佳选择,默认值为15分钟,这与您需要的完全相同。 以下是一个例子:
final PeriodicWorkRequest periodicWorkRequest
= new PeriodicWorkRequest.Builder(ApiWorker.class, 15, TimeUnit.MINUTES)
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
其中ApiWorker只是以下类:
public class ApiWorker extends Worker implements iOnApiRequestSuccessful {
public ApiWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
return Result.success();
}
}
并在返回之前在doWork()函数中填充您希望完成的任何工作
Return.success()使其再次插入队列,以便每15分钟重复一次。但这是否允许我在应用程序本身未运行时执行代码?是的。Alarm Manager就像,你(应用程序)告诉操作系统你想在X百万秒后做某事。然后系统在broadcastReceiver.onReceive()中执行该代码,这是您希望在x毫秒后在后台执行的代码。它工作得很好,但是,停止服务怎么样?am.cancel()?或谢谢@wtsang02如果我需要每100毫秒运行一次后台任务怎么办?将“600000”替换为100,这是以毫秒为单位的间隔。