android面試(基礎篇 9)

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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章