@SuppressLint("NewApi")public class JobHandleService extendsJobService {private int kJobId = 0;
@Overridepublic voidonCreate() {super.onCreate();
Log.i("INFO", "jobService create");
}
@Overridepublic int onStartCommand(Intent intent, int flags, intstartId) {
Log.i("INFO", "jobService start");//在服务启动时,直接将任务推到JobScheduler 的任务队列,然后在设定的时间条件到达时,便会直接吊起我们的服务,走onStartJob()方法
scheduleJob(getJobInfo());returnSTART_NOT_STICKY;
}
@Overridepublic voidonDestroy() {super.onDestroy();
}
@Overridepublic booleanonStartJob(JobParameters params) {//params.getExtras()//scheduleJob(getJobInfo());
boolean isLocalServiceWork = isServiceWork(this, "com.xxx.XxxService");boolean isRemoteServiceWork = isServiceWork(this, "com.xxx.XxxService");if (!isLocalServiceWork || !isRemoteServiceWork) {this.startService(new Intent(this, LocalService.class));this.startService(new Intent(this, RemoteService.class));
Toast.makeText(this, "process start", Toast.LENGTH_SHORT).show();
}return true;
}
@Overridepublic booleanonStopJob(JobParameters params) {
Log.i("INFO", "job stop");//当执行完毕时,我们再将任务加入到 JobScheduler 里面就可以了。
scheduleJob(getJobInfo());return true;
}/*** Send job to the JobScheduler.*/
public voidscheduleJob(JobInfo t) {
Log.i("INFO", "Scheduling job");
JobScheduler tm=(JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);if (tm != null) {
tm.schedule(t);
}
}publicJobInfo getJobInfo() {
JobInfo.Builder builder= new JobInfo.Builder(kJobId++, new ComponentName(this, JobHandleService.class));
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
builder.setPersisted(true);
builder.setRequiresCharging(false);
builder.setRequiresDeviceIdle(false);
builder.setPeriodic(10);//间隔时间--周期
returnbuilder.build();
}/*** 判断某个服务是否正在运行的方法
*
*@parammContext
*@paramserviceName 是包名+服务的类名(例如:net.loonggg.testbackstage.TestService)
*@returntrue代表正在运行,false代表服务没有正在运行*/
public booleanisServiceWork(Context mContext, String serviceName) {boolean isWork = false;
ActivityManager myAM=(ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List myList = null;if (myAM != null) {
myList= myAM.getRunningServices(100);
}if (myList != null && myList.size() <= 0) {return false;
}if (myList != null) {for (int i = 0; i < myList.size(); i++) {
String mName=myList.get(i).service.getClassName();if(mName.equals(serviceName)) {
isWork= true;break;
}
}
}returnisWork;
}
}