• Android 进程数据库更新时机


    1.相关知识点:进程初始化顺序
    进程初始化顺序:ContentProvider(即数据库) > Application > Service;
    参考:https://www.jianshu.com/p/d52960e3f6f2

    2.相关知识点:SQLiteOpenHelper 和 ContentProvider 关系
    SQLiteOpenHelper 本身只是一个SQLite数据库实例,负责数据库的创建,是没有和进程绑定的生命周期的;
    ContentProvider 是四大组件之一,生命周期被系统管理,它的作用是对数据库封装一层接口,对外提供该数据库的读写功能,SQLite数据库实例一般在ContentProvider.onCreate方法中创建;优点是统一数据库访问入口,避免对进程/多线程访问等问题。

    3.数据库升级时,旧数据迁移/改造逻辑处理
    主要是旧数据改造时机问题,数据库更新后数据修改分两种情况:
    <一> 数据迁移
    这种情况数据对数据库数据的整体改造,数据的修改需要在数据库初始化结束之前完成。
    <二>数据修改
    只需要修改布局数据。这种情况有两种时机来修改数据:
    1. 在数据初始化结束之前完成(SQLiteOpenHelper.onUpgrade),这样的优点是在Application和Service等业务启动前完成数据修改,缺点是需要不能使用封装好的dao和manager类,因为dao是基于provider的,而provider是对DbHelper的封装;
    2. 在 Service 初始化时处理,优点是使用dao和manager类操作数据方便,缺点是需要保证在对外提供这些数据之前完成修改;(一套逻辑满足云端下载地图和本地已有地图的更新,如果不考虑代码开发成本,一般建议统一使用第一中方式)

  • 相关阅读:
    【操作系统】内存管理
    【Linux】:命令行参数
    C#学习系列相关之多线程(一)----常用多线程方法总结
    我的创作纪念日
    C++智能指针原理与实现
    Docker教程
    【开发规范】持续更新中......
    解决ubuntu23.10 wifi不能使用的问题
    算法竞赛入门【码蹄集新手村600题】(MT1260-1280)C语言
    六、RocketMQ发送事务消息
  • 原文地址:https://blog.csdn.net/u013168615/article/details/127811953