android 7.0 JobService启动时onStartJob执行问题

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @TargetApi(24)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        JobScheduler scheduler= (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
        JobInfo jobInfo=new JobInfo.Builder(1,new ComponentName(this,Test.class))
                .setPeriodic(2000)
                /*.setOverrideDeadline(2000)*/
                .setPersisted(true)
                .build();
        scheduler.schedule(jobInfo);
        for(JobInfo info:scheduler.getAllPendingJobs()){
            if(jobInfo.getId()==1){
                Toast.makeText(MainActivity.this,"zz",Toast.LENGTH_SHORT).show();
        }
        }

    }

}

Test.java:

@TargetApi(24)
public class Test extends JobService {
    private static int a=0;
    @Override
    public boolean onStartJob(final JobParameters params) {
        Toast.makeText(Test.this,"zz",Toast.LENGTH_SHORT).show();
        jobFinished(params,false);
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}

在android 5.1上执行效果为每2秒一个Toast,但运行在android 7.0上,运行后没有立即出现想要的效果,于是goole查询了相关资料,在运行日志中有下面两行信息:

W/JobInfo: Specified interval for 1 is +2s0ms. Clamped to +15m0s0ms
W/JobInfo: Specified flex for 1 is +7s0ms. Clamped to +5m0s0ms

也就是onStartJob( )里的操作至少会在15min后才会执行. 可以setMinimumLatency( )设置最小推迟时间,但该方法并不能和setPeriodic( )一起使用,只能有效执行一次.

尚未找到解决方法.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值