1.成為Android高手一般分為六個階段:
第一階段:熟練掌握Java SE,尤其是對其內部類、線程、並發、網路編程等需要深入研究;熟練掌握基於HTTP協議的編程,清楚POST和GET等請求方式流程和細節;能夠進行基本的Java Web編程,如果能夠使用Java EE則更好;
第二階段:精通Android的核心API的使用,例如四大組件所涉及的API、Context等,精通核心介面的編程,例如ListView的編程;到達這個階段已經能夠做大部分基本的應用開發了;
第三階段:精通應用程式框架的原理,尤其是對IoC的理解及其在Android應用程式框架中的應用,精通基本的23種設計模式在Android中的應用;
第四階段:精通JNI,熟練Android類庫中C/C++組件開發;並能夠使用JNI機制把現有的C/C++組件移植成為應用程式框架的核心組件;具備修改和編寫自己的應用程式框架的能力;
第五階段:做出自己的Android系統,無論是底層還是上層都能夠了如指掌;能夠根據實際需要設計和實現比較大Android系統,例如帶領比較大的團隊做出自己的Android手機產品等;
第六階段:勢。一切的思考均進入“勢”的思考,一切都是思路問題,判斷和預測Android的形勢,引領市場,通往自由的天堂。
2. Android之IoC (Inversion of Control)
1)概念
一種設計思想。使調用者和被調用者解耦和分離,便於更改和代碼重用,便於移植。
許多應用都是由多個類通過彼此合作來實現商務邏輯,每個對象之間都相互依賴,這將導致代碼高度耦合并且難以測試、難以修改難以重用。
IoC很好的解決了該問題,它將實現組件間關係從程式內部提到外部容器來管理。也就是說由容器在運行期將組件間的某種依賴關係動態注入組件中。控製程序間關係的實現交給了外部容器來完成。
2)案例
為了實現調用者和被調用者解耦,分離,一般是通過原廠模式實現的,下面將通過比較原廠模式和Ioc模式不同,加深理解Ioc模式。
假設有兩個類B 和 C:B作為調用者,C是被調用者。一般的做法是:
public class B{
private C comp=new C();
......
}
原廠模式實現如下:
public class B{
private C comp;
private final static MyFactory myFactory = MyFactory.getInstance();
public B(){
this.comp = myFactory.createInstanceOfC();
}
public void someMethod(){
this.comp.sayHello();
}
}
使用Ioc依賴性注射實現Picocontainer如下:
public class B{
private C comp;
public B(C comp){
this.comp = comp;
}
public void someMethod(){
this.comp.sayHello();
}
}
//外部容器實現,控製程序間的關係。CImp類為C介面/類的一個具體實現。
public class client{
public static void main( String[] args ) {
DefaultPicoContainer container = new DefaultPicoContainer();
container.registerComponentImplementation(CImp.class); //向B類實現注射C類具體實現
container.registerComponentImplementation(B.class);
B b = (B) container.getComponentInstance(B.class);
b.someMethod();
}
}
3)原廠模式和Ioc不同的特點和區別:
如上,主要區別體現在B類的代碼,如果使用Ioc,在B類代碼中將不需要嵌入任何原廠模式等的代碼,因為這些原廠模式其實還是與C有些間接的聯絡,這樣,使用Ioc徹底解耦了B和C之間的聯絡。
使用Ioc帶來的代價是:需要在用戶端或其它某處進行B和C之間聯絡的組裝。
所以,Ioc並沒有消除B和C之間這樣的聯絡,只是轉移了這種聯絡。
總之,使用Ioc模式,可以不管將來具體實現,完全在一個抽象層次進行描述和技術架構。