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