zoukankan      html  css  js  c++  java
  • 读ActiveAndroid源码(五)

    前面几篇,断断续续地囫囵吞枣地读了ActiveAndroid的部分源码,大致了解了ActiveAndroid的注解反射原理。其中很多细节还不算很清楚,加之内容非常多,为了更好地阅读接下来的内容,在此对前面阅读的部分作一个总结。

    在之前的几篇中,重点阅读了ActiveAndroid中的三个类:Conguration , ModelInfo , TableInfo。下面将对这三个类的作用做一个简单地总结:

    一、Conguration

      先看一下Conguration的成员变量: 

        public final static String SQL_PARSER_LEGACY = "legacy";
        public final static String SQL_PARSER_DELIMITED = "delimited";
    
        //////////////////////////////////////////////////////////////////////////////////////
        // PRIVATE MEMBERS
        //////////////////////////////////////////////////////////////////////////////////////
    
        private Context mContext;
        private String mDatabaseName;
        private int mDatabaseVersion;
        private String mSqlParser;
        private List<Class<? extends Model>> mModelClasses;
        private List<Class<? extends TypeSerializer>> mTypeSerializers;
        private int mCacheSize;

      其中有,写成常量的SQL解析器

        public final static String SQL_PARSER_LEGACY = "legacy";
        public final static String SQL_PARSER_DELIMITED = "delimited";

      数据库的上下文、

      数据库的名称、

      数据库的版本、

      数据库的解析器、

      数据库中model子类的列表、

      数据库中序列化的列表、

      和缓存大小。

    总体来看,Conguration就是存了整个数据库的基本信息和数据库中有需要保存的类的列表。每次启动地初始化过程都会初始化这个类,并从AndroidManifest和文件中读取它的基本信息。

    二、ModelInfo 

      同样先看一下ModelInfo的成员变量:

        private Map<Class<? extends Model>, TableInfo> mTableInfos = new HashMap<Class<? extends Model>, TableInfo>();
        private Map<Class<?>, TypeSerializer> mTypeSerializers = new HashMap<Class<?>, TypeSerializer>() {
            {
                put(Calendar.class, new CalendarSerializer());
                put(java.sql.Date.class, new SqlDateSerializer());
                put(java.util.Date.class, new UtilDateSerializer());
                put(java.io.File.class, new FileSerializer());
            }
        };

    ModelInfo的成员变量只有两个mTableInfos和mTypeSerializers。

      mTableInfos储存了每个需要储存的类与TableInfo的映射关系。

      mTypeSerializers储存了每个序列化的接口。

      每当用户要对要储存的类进行读/写操作时,就需要从mTableInfos这个map中找到属于自己的TableInfo,然后根据TableInfo中信息进行相关操作。

    三、TableInfo

      TableInfo的成员变量如下:

        private Class<? extends Model> mType;
        private String mTableName;
        private String mIdName = Table.DEFAULT_ID_NAME;
    
        private Map<Field, String> mColumnNames = new LinkedHashMap<Field, String>();

      分别是:

      TableInfo对应的类、

      这个类对应的表名、

      这个表的Id字段名、

      这个类和表中,成员和字段名的对应关系。

      当我们调用要储存的类的相关方法时,这个类就会找到它的TableInfo,然后根据mColumnNames的映射去操作数据库中的对应字段。

    Done~

  • 相关阅读:
    .Net Attribute详解(下)
    .Net Attribute详解(上)-Attribute本质以及一个简单示例
    美国快递跟踪链接
    ffmpeg中AVBuffer的实现分析
    Android Studio创建JAR/AAR库
    Android Studio添加原生库并自动构建
    代码注释中的专有词——TODO、FIXME和XXX
    adb获得安卓系统版本及截屏
    FFmpeg libavutil主要功能概述
    Linux下库打桩机制分析 function Interposition
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4909038.html
Copyright © 2011-2022 走看看