Dro*_*dOS 0 job-scheduling android-6.0-marshmallow
我的混合式Cordova Android应用程序使用一个自定义插件,在该插件中,我大约每30分钟执行一次后台工作。到现在为止,我已经使用AlarmManger了setInexact报警执行工作。我对该路由唯一真正的问题是,警报无法在重新启动后幸免。鉴于我现在只支持Android的6(API 23)+设备现在我与更换试验AlarmManager用JobScheduler。到目前为止,我的努力如下所示
public class UnyService extends JobService
{
@Override
public boolean onStartJob(JobParameters params)
{
UnyHandler.sendMessage(Message.obtain(UnyHandler,1,params));
return true;
}
@Override
public boolean onStopJob(JobParameters params)
{
UnyHandler.removeMessages(1);
return false;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Handler来执行实际工作。的代码Handler如下所示
private Handler UnyHandler = new Handler(new Handler.Callback()
{
@Override
public boolean handleMessage(Message msg)
{
Feedback.postBackInfo("Handled it!");
jobFinished((JobParameters)msg.obj,false);
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下代码启动并运行该作业
private void launchTimerJob()
{
timerJob =
(JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(1,new
ComponentName(Utils.packName,UnyService.class.getName()));
builder.setPeriodic(30000);
builder.setPersisted(true);
builder.setBackoffCriteria(30000,JobInfo.BACKOFF_POLICY_LINEAR);
if (0 >= timerJob.schedule(builder.build()))
Feedback.postBackInfo("Job Build Error");
else Feedback.postBackInfo("Job Created and Scheduled");
}
Run Code Online (Sandbox Code Playgroud)
我的应用中的哪里Feedback以及Utils提供支持服务的其他类。为了方便测试,我使用了30秒的较短时间。
当我安装并启动该应用程序时,插件初始化代码会调用,launchTimerJob()并且按预期返回“创建和计划作业”通知。
从那时起,我期望得到处理!从Handler上方以大约30秒的间隔发送通知。通知是在奇怪的情况下出现的,但是从应用程序启动起算是完全任意的时间,并且不必重复。显然,我在这里做错了。非常感谢您对确定问题的任何帮助。
Android的文档可以做提一个更好的工作的最小间隔时间允许的定期工作90万毫秒,即
15分钟 !!!!
我收集到在API 24(Nogat)之前可以使用较小的时间间隔,但不再使用。警惕那里提供的各种JobScheduler教程。有很多已经过时,Android Jobs似乎仍在不断发展。
我自己最初使用的原因AlarmManager是使后台程序能够在应用程序后台运行时执行。但是,随着打ze模式的到来,该策略失败了,因为当设备打zing睡时,该应用将根本不会收到广播消息。
请考虑以下策略
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |