【Android】【框架】【Jetpack】【Architect
2019-08-18 本文已影响0人
徐乙_
接入
implementation "android.arch.work:work-firebase:1.0.0-alpha08"
androidTestImplementation "android.arch.work:work-testing:1.0.0-alpha08"
使用
// 1、定义任务
public class MyWorker extends Worker {
@NonNull
@Override
public Result doWork() {
String data = getInputData().getString("workerData");
Log.i("MyWorker","doWork:"+data);
return Result.SUCCESS;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1、执行时机
Constraints mConstraints = new Constraints.Builder()
.setRequiresBatteryNotLow(true) //不在电量不足时执行
.setRequiresCharging(true) //在充电时执行
.setRequiresStorageNotLow(true) //不在存储容量不足时执行
.setRequiresDeviceIdle(true) //在待机状态执行
.build();
// 2、数据
Data data = new Data.Builder().putString("workerData","helloWorld").build();
// 3、构建任务
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MyWorker.class)
.setInputData(data)
.setInitialDelay(5, TimeUnit.SECONDS)
.build();
// 4、任务加入队列
WorkManager.getInstance().enqueue(request);
}
}
原理
image.png image.pngWorkManager中的任务运行在子线程中,WorkManager会选择根据设备的API版本使用适合的算法调用JobScheduler、Firebase JobDispatcher或者AlarmManager来执行任务
优势
WorkManager生命力顽强 ,无视应用退出、App重启,可以把一些逻辑放在这里得到执行,有点像IntentService,但是目前看来要比IntentService厉害得多
甚至可以借助此工具,实现一些黑科技保活、拉活策略
后记
有什么写得错误、让人费解或遗漏的地方,希望可以不吝赐教,我会马上更改