Android JobScheduler 、JobScheduler

package zhangphil.job;

import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.Intent;
import android.widget.Toast;

public class MyService extends JobService {
    private final String TAG = "服务";

    private JobParameters mParameters;

    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println(TAG + "onCreate");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println(TAG + "onStartCommand");

        return JobService.START_NOT_STICKY;
        //return super.onStartCommand(intent, flags, startId);
    }


    /**
     * onStartJob返回false将立即进入onDestroy。
     *
     * @param jobParameters
     * @return false 任务已经完成。 true 成功启动。
     */
    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        System.out.println(TAG + "onStartJob");
        mParameters = jobParameters;

        doMyJob();

        return false;
    }

    /**
     * 任务执行不满足条件时候被调用。
     * 如电量不足,网络不是指定的网络。
     *
     * @param jobParameters
     * @return true 任务计划在下次继续。false不管怎样,不计划下次再执行。
     */
    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        System.out.println(TAG + "onStopJob");

        return true;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println(TAG + "onDestroy");
    }

    private void doMyJob() {
        Toast.makeText(getApplicationContext(), "Job Service执行", Toast.LENGTH_SHORT).show();

        jobFinished(mParameters, true);
    }
}

 

需要在Androidmanifest.xml注册:

       <service
            android:name=".MyService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

 

测试:

import androidx.appcompat.app.AppCompatActivity;

import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private final int JOB_INFO_ID = 0xfa01;
    private final long JOB_PERIODIC = 2 * 60 * 1000L;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);

        ComponentName componentName = new ComponentName(this, MyService.class);
        JobInfo jobinfo = new JobInfo.Builder(JOB_INFO_ID, componentName)
                //.setPeriodic(JOB_PERIODIC) //系统约束,小于15分钟不会生效,必须大于15分钟。
                .setRequiresBatteryNotLow(false)
                .setRequiresCharging(false)
                //setPersisted(true) //保证设备重启后也能按计划运行。
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .build();

        jobScheduler.schedule(jobinfo);
    }
}

 

可以用adb命令dump出当前系统的JobService信息:

adb shell dumpsys jobscheduler

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值