1.WorkManager

WorkManager,个人理解它是一个后台任务管理器,可以保证那些不一定即时完成但一定要完成的任务,WorkManager必须工作在jdk1.8以上
使用前先添加依赖:implementation "androidx.work:work-runtime-ktx:2.1.0
如果代码没错,但是就是编译不通过,可以参考GitHub上的build.gradle配置

2.继承Work类,写自己的work类:AppDatabaseWorker

AppDatabaseWorker类是在数据库被创建伊始时,往数据库内添加数据

package com.example.ngsl.roomimport android.content.Context
import android.util.Log
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import com.example.ngsl.WORD_JSON_FILE_NAME
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.google.gson.stream.JsonReader
import kotlinx.coroutines.coroutineScope//新建数据库时,会执行以下任务:将json文件导入数据库
//这里我继承的是CoroutineWorker,一个协程工作者
class AppDatabaseWorker(context: Context, workerParams: WorkerParameters) :CoroutineWorker(context, workerParams) {//必须重载doWork方法override suspend fun doWork(): Result = coroutineScope {//整个try就是你想实现的功能,最后一定也要有Result.success()语句try {applicationContext.assets.open(WORD_JSON_FILE_NAME).use { inputStream ->JsonReader(inputStream.reader()).use { jsonReader ->//读取JSON文件val wordType = object : TypeToken<List<Word>>() {}.typeval wordList: List<Word> = Gson().fromJson(jsonReader, wordType)//写入数据库val wordRepository = WordRepository.getInstance(applicationContext)wordRepository.insertAll(wordList)Result.success()}}} catch (ex: Exception) {Log.e(TAG, "Error seeding database", ex)Result.failure()}}companion object {//打印日志的标签private val TAG = AppDatabaseWorker::class.java.simpleName}
}

3.调用WorkManager

这是我的一个数据库类AppDatabase ,在被创建伊始时,往数据库内添加数据

package com.example.ngsl.roomimport android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.example.ngsl.DATABASE_NAME@Database(entities = [Word::class] , version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {abstract fun wordDao(): WordDaocompanion object {// 保证单例模式@Volatile private var instance: AppDatabase? = nullfun getInstance(context: Context): AppDatabase {return instance ?: synchronized(this) {instance ?: buildDatabase(context).also { instance = it }}}// 创建数据库private fun buildDatabase(context: Context): AppDatabase {return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).addCallback(object : RoomDatabase.Callback() {override fun onCreate(db: SupportSQLiteDatabase) {super.onCreate(db)//调用WorkManager,OneTimeWorkRequestBuilder表示一次提交完成任务val request = OneTimeWorkRequestBuilder<AppDatabaseWorker>().build()WorkManager.getInstance(context).enqueue(request)}}).build()}}
}

4.GitHub源码链接

整个项目有很多组件,只看你需要的部分:https://github.com/YDDUONG/NGSL-English
如果觉得有用,点个赞吧

Jetpack组件WorkManager简单demo相关推荐

  1. Jetpack组件Room简单Demo

    1.Room介绍 Room是处理数据库的一个中间件,光其自身就有很多组件和概念,这个demo主要用到entity,dao,database,repository entity 实体,创建一个表格 da ...

  2. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  3. Android Jetpack组件之WorkManger使用介绍

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  4. Android Jetpack组件总览

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  5. 带你领略Android Jetpack组件的魅力

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  6. Android Jetpack组件之Hilt使用

    前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. And ...

  7. Android Jetpack组件之Navigation使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  8. Android Jetpack组件之 Room使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  9. Android Jetpack组件之 Paging使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

最新文章

  1. Express框架(http服务器 + 路由)
  2. jQuery的筛选选择器
  3. PAT甲级 -- 1002 A+B for Polynomials (25 分)
  4. 软件评测师教程笔记(更新中)
  5. android连接ecs sql server_MySQL 执行 SQL 语句的过程解析
  6. 微处理器 微型计算机系统,作业答案11微处理器微型计算机和微型计算机系统三者之间.DOC...
  7. jQuery 异步和同步请求
  8. 重启iis最快速的方法
  9. 【持续更新】1996-2022历代AMD Radeon桌面显卡列表,Radeon显卡发布日期
  10. 快速分割多个视频,生成每个视频的m3u8
  11. css实现跑马灯效果
  12. UE4制作多人大地型游戏的优化
  13. 单片机软件定时器V1.0,可大批量创建,操作简单
  14. REASONING ABOUT ENTAILMENT WITH NEURAL ATTENTION 论文阅读笔记
  15. python thinker(菜单,滚动条,回调函数,对话框)
  16. Vue 响应式实现原理深入浅出
  17. 如何生成token,是使用token
  18. Mysql数据库---约束类型_MySQL约束类型及举例介绍
  19. ADOBE全系破解文件(无解压密
  20. 关于日期正则表达式的思路详解

热门文章

  1. Couldn‘tparse bundle asset‘“D: \vue\cy_ gw2\dist\js \chunk- vendors.js1Analyzerwi 11usemodule
  2. Maya中的mayabatch.exe、Render.exe、maya.exe
  3. htaccess 域名 linux,教你使用.htaccess文件实现指定域名访问指定二级目录
  4. mysql 数据库初始化失败怎么办,MYSQL初始化错误方式详解
  5. MySQL初始化配置
  6. JS面向对象编程之:封装、继承、多态
  7. Android 各种图片转黑白图和抖动算法的黑白图
  8. 一篇文章带你彻底搞懂join的用法
  9. at定时任务,一次性定时计划任务
  10. 基于Python的世界各个国家的幸福度的公开数据集的数据挖掘