您当前的位置: 首页 >  数据库
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Jetpack Room数据库(三)源码简析

沙漠一只雕得儿得儿 发布时间:2021-01-03 15:15:10 ,浏览量:0

一、源码架构
  1. room-commonroom-runtimeroom-ktx三个依赖library

  2. CRUD实质使用原生sqlite操作

  3. room内生支持liveData&coroutines

 

  • 源码概览

    • Room-Ktx 扩展函数

      1. CoroutinesRoom.createFlow/execute//支持协程flow 数据流操作
      ​
      //支持协程调度器
      2. CoroutinesRoomKt:>>RoomDatabase.queryDispatcher
      3. CoroutinesRoomKt:>>RoomDatabase.transactionDispatcher
      //事务扩展
      4. RoomDatabaseKt:>> RoomDatabase.acquireTransactionThread()
      5. RoomDatabaseKt:>> RoomDatabase.createTransactionContext()
      6. RoomDatabaseKt:>> RoomDatabase.withTransaction
      ​
      //事务
      TransactionElement

       

    • Room-common注解库

      //各种注解 标记
      @update、@delete、@database、@entity、@room ......

       

    • Room-Runtime运行库

      //关注类
      1.RoomDatabase
      //sqlite database操作helper
      2.SupportSQLiteOpenHelper
      //crud的操作entity
      3.EntityInsertionAdapter/EntityDeletionOrUpdateAdapter

       

二、流程原理

从使用开始@entity@daodatabase

------>>>通过注解kapt------>>生成dao_impldatabase_impl

  • 创建数据库

    • Room.databaseBuilder-->RoomDatabase.builder-->FrameworkSQLiteOpenHelperFactory

      database_impl---SupportSQLiteOpenHelper.create

  • 创建表

    • `database_impl`----->> RoomOpenHelper.Delegate

       

  • 操作表

    • dao_impl

    • entity------>>entityInsertionAdapter/EntityDeletionOrUpdateAdapter------>>在dao_impl中实现

      查询---->> RoomSQLiteQuery------>>DbUtil---->>cursor查询

LiveData的支持:InvalidationTracker-->createLiveData-->InvalidationLiveDataContainer-->roomlivedata

三、附注
  1. 增删改默认不建议主线程操作(RoomDatabase.assertNotMainThread)

  2. 增删改通过SharedSQLiteStatement实现类操作

  3. 通过SupportSQLiteQuery的实现类操作

 

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0390s