Android基本知識點
1、常規知識點
1、 Android類加載器
在Android開發中,不管是插件化還是組件化,都是基于Android系統的類加載器ClassLoader來設計的。只不過Android平臺上虛擬機運行的是Dex字節碼,一種對class文件優化的產物,傳統Class文件是一個JAVA源碼文件會生成一個.class文件,而Android是把所有Class文件進行合并、優化,然后再生成一個最終的class.dex,目的是把不同class文件重復的東西只需保留一份,在早期的Android應用開發中,如果不對Android應用進行分dex處理,那么最后一個應用的apk只會有一個dex文件。
Android中常用的類加載器有兩種,DexClassLoader和PathClassLoader,它們都繼承于BaseDexClassLoader。區別在于調用父類構造器時,DexClassLoader多傳了一個optimizedDirectory參數,這個目錄必須是內部存儲路徑,用來緩存系統創建的Dex文件。而PathClassLoader該參數為null,只能加載內部存儲目錄的Dex文件。所以我們可以用DexClassLoader去加載外部的apk文件,這也是很多插件化技術的基礎。
2、 Service
理解Android的Service,可以從以下幾個方面來理解:
Service是在main Thread中執行,Service中不能執行耗時操作(網絡請求,拷貝數據庫,大文件)。
可以在xml中設置Service所在的進程,讓Service在另外的進程中執行。
Service執行的操作最多是20s,BroadcastReceiver是10s,Activity是5s。
Activity通過bindService(Intent,ServiceConnection,flag)與Service綁定。
Activity可以通過startService和bindService啟動Service。
IntentService
IntentService是一個抽象類,繼承自Service,內部存在一個ServiceHandler(Handler)和HandlerThread(Thread)。IntentService是處理異步請求的一個類,在IntentService中有一個工作線程(HandlerThread)來處理耗時操作,啟動IntentService的方式和普通的一樣,不過當執行完任務之后,IntentService會自動停止。另外可以多次啟動IntentService,每一個耗時操作都會以工作隊列的形式在IntentService的onHandleIntent回調中執行,并且每次執行一個工作線程。IntentService的本質是:封裝了一個HandlerThread和Handler的異步框架。