1.课程计划与效果
1.1 课程介绍








1.2 效果







2.项目架构设计与模块分解
【整体介绍】

【代码生成器model】

【核心model】

【业务model】

【具体项目的model】



3.项目基础骨架搭建
3.1 新建model
【新建项目】


【修改项目的名字】

【annimotion的库】:注意一定是java库;



【compile 编译器的model】也是java库

【核心model】是android Library


【电商model】


【构建model的目录】

3.2 【构建model依赖关系】
【核心module】核心库依赖于注解



【业务逻辑model】依赖于核心module;



【项目module】

【注解指示器的修改】老版的as中建议使用apt,但是现在新版的建议使用annotationProcessor注解器;


3.3【库的移动修改】
【剪切移动】

【删除】

【删除】

4.搭建自己的git代码托管仓库
【使用的是go语言的环境】
【as配置版本控制】



【加入到版本控制的范围内】

【提交】





5.框架主配置入口的设计与实践
【说明】
【1】只有一个Activity,中间的界面的切换都是使用的fragment,这是经验总结;
【2】使用一个全局的application,管理全局的的重复的工作;
【3】配置的管理:配置的管理和存储和获取;
5.1 配置类的创建
【1】WeakHashMap 列表,资源回收及时,推荐使用;
【说明】修改之后的为下面使用的HashMap,因为配置会伴随着应用的一直的运行,因此不能使用弱引用回收;

【2】规范:static final 的命名使用大写,并且使用下划线分割;

【枚举的使用】在应用程序中是唯一的单例,只能被初始化一次,如果是多线程操作,完全可以使用枚举进行安全的惰性的单例的初始化,可以保证线程安全,相当于线程安全的懒汉模式;

【源码】com.flj.latte.app.ConfigKeys.java
1 package com.flj.latte.app; 2 6 7 public enum ConfigKeys { 8 API_HOST, //配置网络请求的域名 9 APPLICATION_CONTEXT,//全局上下文 10 CONFIG_READY, //初始化控制是否完成 11 ICON, //存储自己的初始化配置 12 LOADER_DELAYED, 13 INTERCEPTOR, 14 WE_CHAT_APP_ID, 15 WE_CHAT_APP_SECRET, 16 ACTIVITY, 17 HANDLER, 18 JAVASCRIPT_INTERFACE 19 }
【关于单例模式的说明】
【1】如果使用懒汉模式,就是用双重校验锁,sychronized的关键字,防止线程冲突;在多线程开发的实际项目中一般写的都是有问题的;
【2】使用枚举类统一的初始化
【3】使用静态内部类的单例模式的初始化;


【配置的完善】

5.2 初始化app
【将对象的引用保存在配置中并且返回】



【配置apihost】

【检查配置】
【思想】在写类变量或者方法变量的时候,尽量让变量不可变性达到最大化。如果此变量在后续的代码中不在修改,则使用final修饰;
最大限度的避免去更改一个本不应该更改的变量。在jvm虚拟机上,或多或少对final变量和public final的修饰会做优化,性能可以得到提升。
不增加final是可以的,但是推荐加上;


【调用的时机】在应用程序中获取配置的时候调用,如果没有调用Configurator配置一切的方法的时候,就会抛出运行时异常,保证配置的完整性和正确性。
【增加注解】注解的意义:告诉编译系统,这个类型是没有检测过的,可以对该方法不做检查。


5.3 APP对配置的调用

6.字体图标库集成与封装
6.1 库的添加
【库的地址】https://github.com/JoanZapata/android-iconify
【字体图标库】使用字体来代替很多的图标;可以保证之前的图片的高保真;




6.2 封装
【对该库进行封装】

【初始化】

【添加自己的字体图标】

【APP调用】

6.3 使用第三放的ttf图标库



【引入字体库】

【字体库的获取】



【调用第三方字体库】


【新建枚举类】


[参考] 采用中划线替换掉了下划线;
1 @Override 2 public String key() { 3 return name().replace('_', '-'); 4 }


【继续处理】可以直接修改为下面的数字的格式,就可以编译通过了:
1 icon_scan('\ue602'), 2 icon_ali_pay('\ue606');

【返回自定的值】

【调用】

7.基础框架可用性验证
7.1 【测试】显示一个文本
【提供字体的网站】



7.2 弹吐司的测试
【完善类】传入上下文;

【再测试】弹吐司


