5.0API以后用的JobScheduler 5.0API之前用GCM---谷歌的Google Play ServiceManager,国内基本是废的。(里面有很多的网络优化的代码--包括访问策略等)
package com.nan.batterydemo;
import android.annotation.TargetApi; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.WindowManager;
import java.util.List;
@TargetApi(21) public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ComponentName serviceComponent = new ComponentName(this, MyJobService.class);
//频繁地唤醒
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
for (int i = 0; i < 500; i++) {
JobInfo jobInfo = new JobInfo.Builder(i, serviceComponent)
.setMinimumLatency(5000)//最小延时5秒
.setOverrideDeadline(60000)//最多执行时间60秒
// .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)//免费的网络---wifi 蓝牙 USB .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//任意网络---wifi //设置重试(退避)策略:当一个任务失败的时候,采取什么重试策略 //第一次尝试重试的等待时间间隔 .setBackoffCriteria(JobInfo.DEFAULT_INITIAL_BACKOFF_MILLIS, JobInfo.BACKOFF_POLICY_LINEAR) //设置设备重启以后,这个任务是否还需要保留 //.setPeriodic() // //.setPersisted() .build(); jobScheduler.schedule(jobInfo);
//取消job,如果任务已经正在执行了是不能取消的
jobScheduler.cancel(1);
//取消所有job
jobScheduler.cancelAll();
//获取该进程里面所有等待的任务
List<JobInfo> allPendingJobs = jobScheduler.getAllPendingJobs();
}
}
}