4)Activity,Window,View三者的差別,Fragment的特點?
Activity是控制單元,Window是承載模型,View是顯示視圖(窗花),LayoutInflater是剪刀,
Xml像窗花的圖紙。
(1)在Activity中調用attach,創建一個window
(2)創建window是其子類PhoneWindow,在attach中創建的是PhoneWindow
(3)創建Activity中調用setContentView(R.layout.xxx)來綁定view,其中實際上是調用的
getWindow().setContentView(),即調用PhoneWindows中的setContentView方法。
(4)創建ParentView:作爲ViewGroup的子類,實際是創建的DecorView,將制定的Layout
通過佈局填充器進行填充,調用ViewGroup的removeAllView先將所有的view移除掉
(5)添加新的View:addView()
Fragment的特點
(1)Fragment可以作爲Activity界面的一個組成部分出現
(2)可以在一個Activity中出現多個Fragment,並且一個Fragment也可以在多個Activity中使用
(3)Activity運行過程中可以添加,移除或者替換Fragment
(4)Fragment可以相應自己的輸入事件,並且有自己的生命週期,他們的生命週期會受到宿主
Activity的生命週期影響。
5)Handler,Thread和HandlerThread的差別
從Android中Thread描述可以看出,Android的Thread沒有對Java的Thread做任何封裝,但是Android
提供了一個基礎自Thread的類HandlerThread,這個類對Java的Thread做了很多針對Android系統的封裝。
android.os.Handler可以通過Looper對像實例化,並運行於另外一個線程中,Android提供了讓Handler
運行與其他線程的線程實現,也就是HandlerThread。HandlerThread對象start後可以獲得其Looper對象
並使用這個Looper對象實例化Handler。
6)低版本SDK實現高版本API
自己實現或者@TargetApi annotation
使用@TargetApi annotaion, 使高版本API的代碼在低版本SDK不報錯
例如:AsyncTask.THREAD_POOL_EXECUTOR, 這個靜態變量是API11纔有的, 設置project build target 爲 2.1.
這個時候eclipse會提示找不到這個變量。只要在方法前面加一個 @TargetApi(11), 這樣就不會報錯了,程序
已經可以跑在低版本SDK上了。另外在代碼上要加一個版本判斷是否執行該代碼, 例子如下
@TargetApi(11)