本文只是粗浅的写个demo,惭愧,目前不愿深究它
JobScheduler目前就我认知解决4个问题:
1.打包操作
2.充足电量、充电情况
3.wifi、移动数据情况
4.休眠
service
package com.example.demo; import android.app.job.JobParameters; import android.app.job.JobService; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; public class XJobService extends JobService { private static final String TAG = "xbh"; @Override public boolean onStartJob(JobParameters params) { if (isNetworkConnected()) { Log.i(TAG, "我进行了网络请求"); return true; } return false; } @Override public boolean onStopJob(JobParameters params) { return false; } private boolean isNetworkConnected() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = null; if (connectivityManager != null) { networkInfo = connectivityManager.getActiveNetworkInfo(); } return (networkInfo != null && networkInfo.isConnected()); } }
注册,并且给予权限
<service android:name=".XJobService" android:permission="android.permission.BIND_JOB_SERVICE" />
提交任务
package com.example.demo; import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private ComponentName serviceComponentName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //开启服务 Intent intent = new Intent(this, XJobService.class); startService(intent); serviceComponentName = new ComponentName(this, XJobService.class); //提交10个任务 submitTask(); } private void submitTask() { JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); for (int i=0; i<10; i++) { JobInfo jobInfo = new JobInfo.Builder(i, serviceComponentName) .setMinimumLatency(5000) //任务运行最少延迟时间 .setOverrideDeadline(60000) //任务运行最晚期限 .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//有网的时候 .build(); if (scheduler != null) { scheduler.schedule(jobInfo); } } } }