【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

时间:2022-01-11 21:14:04

 1.课程计划与效果

1.1 课程介绍

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

1.2 效果

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

2.项目架构设计与模块分解

【整体介绍】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【代码生成器model】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【核心model】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【业务model】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【具体项目的model】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

3.项目基础骨架搭建

3.1 新建model

【新建项目】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【修改项目的名字】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【核心model】是android Library

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【电商model】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【构建model的目录】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

3.2 【构建model依赖关系】

【核心module】核心库依赖于注解

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【项目module】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

3.3【库的移动修改】

【剪切移动】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【删除】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【删除】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

4.搭建自己的git代码托管仓库

【使用的是go语言的环境】

【as配置版本控制】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【提交】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

5.框架主配置入口的设计与实践

 【说明】

【1】只有一个Activity,中间的界面的切换都是使用的fragment,这是经验总结;

【2】使用一个全局的application,管理全局的的重复的工作;

【3】配置的管理:配置的管理和存储和获取;

5.1 配置类的创建

【1】WeakHashMap 列表,资源回收及时,推荐使用; 

【说明】修改之后的为下面使用的HashMap,因为配置会伴随着应用的一直的运行,因此不能使用弱引用回收;

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

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

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【源码】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】使用静态内部类的单例模式的初始化;

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【配置的完善】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 5.2 初始化app

【将对象的引用保存在配置中并且返回】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【配置apihost】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【检查配置】

 【思想】在写类变量或者方法变量的时候,尽量让变量不可变性达到最大化。如果此变量在后续的代码中不在修改,则使用final修饰;

 最大限度的避免去更改一个本不应该更改的变量。在jvm虚拟机上,或多或少对final变量和public final的修饰会做优化,性能可以得到提升。

不增加final是可以的,但是推荐加上;

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【调用的时机】在应用程序中获取配置的时候调用,如果没有调用Configurator配置一切的方法的时候,就会抛出运行时异常,保证配置的完整性和正确性。

【增加注解】注解的意义:告诉编译系统,这个类型是没有检测过的,可以对该方法不做检查。

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

5.3 APP对配置的调用

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

6.字体图标库集成与封装

6.1 库的添加

【库的地址】https://github.com/JoanZapata/android-iconify

【字体图标库】使用字体来代替很多的图标;可以保证之前的图片的高保真;

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

6.2 封装

【对该库进行封装】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【初始化】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【添加自己的字体图标】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【APP调用】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

6.3 使用第三放的ttf图标库

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【引入字体库】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【字体库的获取】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【调用第三方字体库】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【新建枚举类】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

[参考] 采用中划线替换掉了下划线;

1 @Override
2     public String key() {
3         return name().replace('_', '-');
4     }

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【继续处理】可以直接修改为下面的数字的格式,就可以编译通过了:

1     icon_scan('\ue602'),
2     icon_ali_pay('\ue606');

 

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【返回自定的值】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【调用】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

7.基础框架可用性验证

7.1 【测试】显示一个文本

【提供字体的网站】

 【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

7.2  弹吐司的测试

【完善类】传入上下文;

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【再测试】弹吐司

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】

【0102】【项目实战】-【Android通用框架设计与完整电商APP开发】-【1】