ジョブ・スケジュールを使用してタスクを合理的にスケジュールします.
転載先:https://www.cnblogs.com/ouyanliu/p/7220279.html?utm_source=itdadao&utm_medium=referral
JobScheduleはAndroid 5.0以降に追加されたもので、以前のバージョンはありません.
JobScheduleの原理は任務を適切な実際に配置して操作する方案のメカニズムである.具体的には、次のようなオプションのタイミングが用意されています.は、利用可能なネットワークの下で実行する.7.0までに、アプリケーションは、ネットワークの変化を傍受することによってタスクを実行することができ、もちろん、アプリケーションが生存しなければならないことが前提である.7.0以降、このようなAPIは失効したが、JobScheduleメカニズムはネットワークの変化の傍受を提供した.さらに、ネットワークが変化する場合に何らかの動作を実行することができる.例えばwifi環境下でダウンロードタスク等を実行する. デバイスは、充電またはアイドル時にいくつかのタスクを実行する. は実行する時間を設定し、これは上記の2つの条件とともに使用する.
具体的な実現は以下の通りである.
1タスクスケジュール
2処理任务タスクが手配されると、JobSchedulerサービスに記録されるはずです.条件が満たされると、jobに対応するjobサービスが起動する、そうでない場合.
まずJobServiceの構成と定義
まとめると、Schedulerは開発者に提供する最適化消費電力のタスクの手配方式である.
その他の消費電力の最適化方法はappの消費電力の最適化を見てください
JobScheduleはAndroid 5.0以降に追加されたもので、以前のバージョンはありません.
JobScheduleの原理は任務を適切な実際に配置して操作する方案のメカニズムである.具体的には、次のようなオプションのタイミングが用意されています.
具体的な実現は以下の通りである.
1タスクスケジュール
// JobScheduler
final JobScheduler scheduler = context.getSystemService(JobScheduler.class);
//
final JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE );
// JobInfo jobId jobID. BusinessService Job Service, Service JobService
final JobInfo.Builder builder = new JobInfo.Builder(jobId, new ComponentName(context, BusinessService.class));
// . RECEIVE_BOOT_COMPLETED
builder.setPriority(JobInfo.PRIORITY_FOREGROUND_APP);
// . . .
builder.setFlags(JobInfo.FLAG_WILL_BE_FOREGROUND);
// , setPeriodic(long time)
builder.setMinimumLatency(time);
// JobInfo.NETWORK_TYPE_UNMETERED (wifi), JobInfo.NETWORK_TYPE_NOT_ROAMING , NETWORK_TYPE_ANY
//JobInfo.NETWORK_TYPE_NONE
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
//
builder.setRequiresCharging(true);
//
builder.setRequiresDeviceIdle(true);
// 5
builder.setPeriodic(5000);
// 5
builder.setOverrideDeadline(5000);
// Job
JobInfo job = builder.build();
// Job, JobScheduler.RESULT_SUCCESS , JobScheduler.RESULT_FAILURE
scheduler.schedule(job)
// jobId
final int jobId = (int) info.mId;
scheduler.cancel(jobId);
// Job, packageName Job( ). userId Job
scheduler.scheduleAsPackage(builder.build(), packageName, UserHandle.myUserId(), TAG);
2処理任务タスクが手配されると、JobSchedulerサービスに記録されるはずです.条件が満たされると、jobに対応するjobサービスが起動する、そうでない場合.
まずJobServiceの構成と定義
<!– true, JobService –>
<!– –>
<service
android:name=".BusinessService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE"
/>
public class BusinessService extends JobService {
// Job . ( ) false Job . true Job .
public boolean onStartJob(JobParameters params) {
final int id = params.getJobId();
//.... Job
//1 , return false.
//2 , , true. jobFinished
myHandler.removeMessages(id);
myHandler.sendEmptyMessage(id);
}
//Job , , , , , .
public boolean onStopJob(JobParameters params) {
// .
scheduler.schedule(job)
}
// . jobFinished(JobParameters params, boolean needsRescheduled) ( ). needsRecheduled .
// onStartJob true. .
// . .
}
まとめると、Schedulerは開発者に提供する最適化消費電力のタスクの手配方式である.
その他の消費電力の最適化方法はappの消費電力の最適化を見てください