方法一:For Safe args, add the following classpath in your top level build.gradle
file
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha06"
}
}
And in your app or module build.gradle
file
apply plugin: "androidx.navigation.safeargs"
方法2:
WorkManager requires compileSdk
version 28 or higher.
配置添加:
dependencies {
def work_version = "1.0.0-alpha10"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"
// optional - Test helpers
androidTestImplementation "android.arch.work:work-testing:$work_version"
}
使用方法
public class Work extends Worker {
public Work(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
Log.e("----doWord", "doWork: " );
return Result.SUCCESS;
}
}
在Activity调用它,这是一个一次性任务
OneTimeWorkRequest request=new OneTimeWorkRequest.Builder(Work.class).build();
WorkManager.getInstance().enqueue(request);
成功打印log,
现在你可以给他添加约束,让他在限定条件下运行:
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) // 网络状态
.setRequiresBatteryNotLow(true) // 不在电量不足时执行
.setRequiresCharging(true) // 在充电时执行
.setRequiresStorageNotLow(true) // 不在存储容量不足时执行
// .setRequiresDeviceIdle(true) // 在待机状态下执行,需要 API 23
// Many other constraints are available, see the
// Constraints.Builder reference
.build();
// ...then create a OneTimeWorkRequest that uses those constraints
OneTimeWorkRequest compressionWork =
new OneTimeWorkRequest.Builder(Work.class)
.setConstraints(myConstraints)
.build();
取消任务
UUID compressionWorkId = request.getId();
WorkManager.getInstance().cancelWorkById(compressionWorkId);
这是一个有标记的任务
OneTimeWorkRequest cacheCleanupTask =
new OneTimeWorkRequest.Builder(Work.class)
//.setConstraints(myConstraints)
.addTag("cleanup")
.build();
WorkManager.getInstance().enqueue(cacheCleanupTask);//开始一个有标记的任务
WorkManager.getInstance().getStatusesByTag("cleanup");//找到标记的任务
WorkManager.getInstance().cancelAllWorkByTag("cleanup");//取消该标记的所有任务
定时任务:
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) // 网络状态
.setRequiresBatteryNotLow(true) // 不在电量不足时执行
.setRequiresCharging(true) // 在充电时执行
.setRequiresStorageNotLow(true) // 不在存储容量不足时执行
.build();
PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(Work.class, 15, TimeUnit.MINUTES).setConstraints(myConstraints).build();
WorkManager.getInstance().enqueue(build);
- 定时任务有最小间隔时间的限制,是 15 分钟
- 只有程序运行时,任务才会得到执行
- 无法拉起 Activity
- 如下图设置了1秒执行一次但是还是等15分钟才会显示log