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 彈吐司的測試
【完善類】傳入上下文;

【再測試】彈吐司


