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();@Overrideprotected 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(); //获取该进程里面所有等待的任务 ListallPendingJobs = jobScheduler.getAllPendingJobs(); }}复制代码
}