美文网首页
49. WorkManager的使用和原理

49. WorkManager的使用和原理

作者: 任振铭 | 来源:发表于2021-06-09 08:26 被阅读0次

    简介

    WorkManger是Android Jetpack提供执行后台任务管理的组件,它适用于需要保证 系统即使应用程序退出也会运行的任务,WorkManager API可以轻松指定可延迟的 异步任务以及何时运行它们,这些API允许您创建任务并将其交给WorkManager立 即运行或在适当的时间运行。
    WorkManager根据设备API级别和应用程序状态等因素选择适当的方式来运行任 务。如果WorkManager在应用程序运行时执行您的任务之一,WorkManager可以 在您应用程序进程的新线程中运行您的任务。如果您的应用程序未运行, WorkManager会选择一种合适的方式来安排后台任务 - 具体取决于设备API级别和包 含的依赖项,WorkManager可能会使用 JobScheduler,Firebase JobDispatcher或 AlarmManager

    WorkManager作用

    一:确保重要的后台任务,一定会被执行,后台任务(例如:非及时性的 (请求服 务器 及时性) 上传,下载,同步数据 等)
    二:内部对电量进行了优化,不需要我们去处理电量优化了
    三:API 14 到 最新版本,都可以使用WorkManager来管你你的后台任务
    四:注意:WorkManager不能做保活操作 (重复执行后台任务的最少执行单位是 15分钟,源码内部限制)

    WorkManager的各个角色

    Worker:指定需要执行的任务,可以成为Workder类的子类,在实
    现的方法中,就可以执行任务逻辑了
    WorkRequest:执行一项单一的任务
    第一点:必须知道 WorkRequest对象,必须指定Work执行的任务
    第二点:需要知道 WorkRequest都有一个自动生成的唯一ID,可以使用ID执行取消 排队任务 或 获取任务状态等操作
    第三点:需要知道 WorkRequest是一个抽象的类;系统默认实现子类 OneTimeWorkRequest或PeriodicWorkRequest
    第四点:需要知道 WorkRequest.Builder创建WorkRequest对象;相应的子类: OneTimeWorkRequest.Builder或PeriodicWorkRequest.Builder
    第五点:需要知道 Constraints:指定对任务运行时间的限制(任务约束);使用 Constraints.Builder创建Constraints对象 ,并传递给WorkRequest.Builder

    主线流程

    使用方式

    implementation "androidx.work:work-runtime:2.3.4"
    

    1.创建一个任务
    创建一个类,继承自Worker

    public class MainWorker1 extends Worker {
    
        private final static String TAG = MainWorker1.class.getSimpleName();
    
        public MainWorker1(@NonNull Context context, @NonNull WorkerParameters workerParams) {
            super(context, workerParams);
        }
    
        // 后台任务 并且 异步的
        @NonNull
        @Override
        public Result doWork() {
            Log.d(TAG, "MainWorker1 doWork: run started ... ");
            try {
                Thread.sleep(8000); // 睡眠
            } catch (InterruptedException e) {
                e.printStackTrace();
                return Result.failure(); // 本次任务失败
            } finally {
                Log.d(TAG, "MainWorker1 doWork: run end ... ");
            }
            return Result.success(); // 本次任务成功
        }
    }
    
    

    2.执行任务

    OneTimeWorkRequest oneTimeWorkRequest =
                    new OneTimeWorkRequest.Builder(MainWorker1.class).build();
    WorkManager.getInstance(this).enqueue(oneTimeWorkRequest);
    

    相关文章

      网友评论

          本文标题:49. WorkManager的使用和原理

          本文链接:https://www.haomeiwen.com/subject/zdiseltx.html