首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓6+睡眠模式下的后台操作

安卓6+睡眠模式下的后台操作
EN

Stack Overflow用户
提问于 2017-05-25 16:13:52
回答 2查看 1.7K关注 0票数 1

我创建了一个Android应用程序,它每5分钟发送一次坐标到我的服务器,在6.0版本之后,当手机进入睡眠/打瞌睡模式时,警报(我测试了每种类型的警报)每1到2个小时触发一次,尽管应用程序在白名单中!

我创建了一个firebase通知,只发送启动服务的数据,但结果是相同的,onMessageReceived在关闭屏幕后触发约10分钟,并在手机唤醒时重新启动……我看到越来越多的话题关注这种情况,但没有人提出一个可行的解决方案。

有人知道我可以不停顿地在后台发送坐标的方法吗?

请帮帮我谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-05-25 17:59:58

@Cristian你需要使用JobScheduler来执行上述API21的后台任务这将为你工作请参考下面的链接

下面是一个定期执行JobService操作的示例:

代码语言:javascript
复制
ComponentName serviceComponent = new ComponentName(context, yourJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); 
builder.setRequiresDeviceIdle(false); 
builder.setRequiresCharging(false); 
builder.setPeriodic(60000); // <<<<----  60 seconds interval

JobScheduler jobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());

https://developer.android.com/reference/android/app/job/JobScheduler.html

https://github.com/googlesamples/android-JobScheduler

你可以使用firebase jobdispatcher,它还可以保证设备的电池续航时间,并且还可以兼容最多9个API

https://github.com/firebase/firebase-jobdispatcher-android

票数 0
EN

Stack Overflow用户

发布于 2017-05-26 01:53:11

我让MyJobService扩展了JobService

代码语言:javascript
复制
String TAG = "heyTaxiLOG";

@Override
public boolean onStartJob(JobParameters job) {
    // Do some work here
    Log.d(TAG,"JobService on Start");
    //Start Service extends IntentService
    startService(new Intent(this, GPSTracker.class));
    return false; // Answers the question: "Is there still work going on?"
}

@Override
public boolean onStopJob(JobParameters job) {
    return false; // Answers the question: "Should this job be retried?"
}

从谷歌获取位置的GPSTracker as IntentService,这没有问题,太长了!

和dispatcher在MainActivity中的OnCreate方法中调用

代码语言:javascript
复制
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));

Job myJob = dispatcher.newJobBuilder()
    // the JobService that will be called
    .setService(MyJobService.class)
    // uniquely identifies the job
    .setTag("GPS")
    // one-off job
    .setRecurring(true)
    // don't persist past a device reboot
    .setLifetime(Lifetime.FOREVER)
    // start between 0 and 60 seconds from now
    .setTrigger(Trigger.executionWindow(180, 180))
    // don't overwrite an existing job with the same tag
    .setReplaceCurrent(true)
    // retry with exponential backoff
    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
    // constraints that need to be satisfied for the job to run
    .setConstraints(
            Constraint.ON_ANY_NETWORK
    )
    //.setExtras(myExtrasBundle)
    .build();

dispatcher.mustSchedule(myJob);

Firebase Job Dispatcher曾经运行过吗?也在打瞌睡模式下吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44175577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档