云炬Android开发笔记 3-1项目架构初始化
一、項目架構初始化
1、我們的應用只有一個activity,它里面是多個fragment進行切換的,這樣的好處是應用會非常順滑,并且一個activity也可以進行很多全局的處理。
在類前加上final字段,說明不允許繼承和修改該類。應用一般的做法是創建一個類,繼承Application,在onCreate()方法中進行初始化,然后在application屬性中將name屬性標上,這是通常的一個做法,但是這種做法很煩,需要寫很多地方。那么應該如何做呢?我們可以把一些全局信息存儲在一個map里面,包括applicationContext,然后在任何引用了這個庫的業務邏輯的module里面,都可以直接去使用它。
?
2、Latte:
是一個工具類,里面都是一些靜態方法。
?
3、Configurator:
進行一些配置文件的存儲,以及獲取的。
這里使用的是static final的一個類,這樣在全局初始化的時候就會進行初始化。這里使用的是WeakHashMap,它里面保存的鍵值對,在不使用的時候就會進行回收,而且非常及時。也就是說它可以最大限度地避免內存爆滿,它比hashmap要好很多,特別是在存儲大量東西的時候。我們存儲的對象可能是一個字符串、可能是一個int值,可能是一個對象,這個時候就使用object進行存儲,這樣靈活性就比較高了。
configure():告訴我們配置已經配置好了。
?
單例創建配置對象,這是一個非常安全的線程單例懶漢模式
?
withApiHost():配置Api Host
checkConfiguration():檢查配置是否完成。在寫類變量或者方法變量的時候,盡量讓它的變量不可變性達到最大化。什么叫做不可變量最大化呢?比如final關鍵字。就是說這個變量在以后的程序開發中不會再去修改它了,就用final去修飾。用final修飾呢,可以很大程度上減少本不該更改的變量。jvm虛擬機也可以對一些final和final修飾的public final修飾的一些關鍵字進行優化。或多或少都會有一些性能的提升。其實在方法上不加final也是可以的,個人推薦還是加上。這個方法是在什么時候調用呢?當然是在程序中需要獲取這個方法的時候調用。如果沒有使用這個configure()方法的時候,就會拋出這個異常,來保證我們配置的完整性和健壯性。
?
?
getConfiguration(Enum<ConfigType>key):參數是枚舉類型,泛型是ConfigType,上面的注解是告訴編譯器,上面那個類型我是沒有檢測過的,但是并不拋出警告。當然不加這個注解也是可以的,但是會有一個黃色的東東
?
調用方式,在唯一的activity入口或者application的onCreate()方法中調用
?
如果想要加入其它配置的話,只要調用相應的方法就可以
?
注:編寫代碼的一個規范,不管是java開發還是Android開發,static final類在聲明的時候,名字需要大寫,并且需要下劃線來分割,這是一個良好的習慣。
關于單例模式,如果要使用懶漢模式的話,要不然就使用雙重校驗鎖,也就是syncronized關鍵字來防止它的線程沖突,因為在正常情況下,用懶漢模式寫的一般都是有問題的。要么就是用枚舉類來進行統一的初始化。或者一種比較優雅的方式,就是靜態內部類的初始化。
?
?
4、枚舉類ConfigType
API_HOST:用來配置網絡請求的域名
APPLICATION_CONTEXT:整個應用的上下文
CONFIG_READY:初始化或者配置完成了沒有
ICON:用來配置我們自己的一些初始化項目
?
?
5、Latte:
當調用latte的init()方法時,其實就是將配置項傳入到Configurator里面進行一些相應的配置
?
枚舉類在整個應用程序中,是唯一的一個單例,并且它只能被初始化一次。也就是說在使用多線程的時候,完全可以使用枚舉類來進行一個惰性的單例初始化。也就是通俗說線程安全的懶漢模式。
總結
以上是生活随笔為你收集整理的云炬Android开发笔记 3-1项目架构初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云炬Android开发报错处理教程 解
- 下一篇: 工科神器matlab高校遭禁用,网友:关