1. 程式人生 > >Android 面試題總結

Android 面試題總結

src 根據 四大組件 使用 順序 onf 結構 每次 面試

1.Android四大組件以及作用???

           Activity:Activity是Android程序與用戶實現交互的窗口,是Android中最重要的一中,它需要保存各界面的狀態,做很多持久化的事情。        

            Service:運行與後臺服務於Activity,定義好接受的Intent提供同步和異步的接口。   

            Content Provider:   

            BroadCast Receiver:

2.Android中常用的五中布局???

       FrameLayout: 框架布局                 LinearLayout:線性布局         

        AbsolueLayout:絕對布局                RelativeLayout:相對布局        

        TableLayout:表格布局 

3.Android 中動畫有哪幾類???它們的特點和區別是什麽???

       兩類,一類是Tween動畫、另一類是Frame動畫。        

        Tween動畫,實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化。       

        Frame動畫,通過一定的順序來播放一組圖片,(如gif圖)。

4.Android中Listview優化方案???

            如果是自定義適配器,那麽在getView方法中考慮傳進來額參數contenView是否為null,如果不為null則直接使用,盡量減少view的創建。        

             給contentView設置tag(setTag()),傳入viewHolaer對象,用於緩存要顯示的數據,可以達到圖像數據的異步加載。       

            如果Listview需要顯示的item比較多時,就要考慮數據的分頁加載,根據需求去對應加載數據。 

5.ArrayList與LinkedList的區別和適用場景???

    Arraylist:

            優點:ArrayList是實現了基於動態數組的數據結構,因為地址連續,一旦數據存儲好了,查詢操作效率會比較高(在內存裏是連著放的)。

            缺點:因為地址連續, ArrayList要移動數據,所以插入和刪除操作效率比較低。

    LinkedList:

            優點:LinkedList基於鏈表的數據結構,地址是任意的,所以在開辟內存空間的時候不需要等一個連續的地址,對於新增和刪除操作add和remove,LinedList比較占優勢。LinkedList 適用於要頭尾操作或插入指定位置的場景。

            缺點:因為LinkedList要移動指針,所以查詢操作性能比較低。

    適用場景分析: 當需要對數據進行對此訪問的情況下選用ArrayList,當需要對數據進行多次增加刪除修改時采用LinkedList。

6.View的繪制流程???

    View的繪制流程:OnMeasure()——>OnLayout()——>OnDraw()

    各步驟的主要工作:

    OnMeasure():

            測量視圖大小。從頂層父View到子View遞歸調用measure方法,measure方法又回調OnMeasure。 OnLayout():

            確定View位置,進行頁面布局。從頂層父View向子View的遞歸調用view.layout方法的過程,即父View根據上一步measure子View所得到的布局大小和布局參數,將子View放在合適的位置上。

    OnDraw():

            繪制視圖:ViewRoot創建一個Canvas對象,然後調用OnDraw()。六個步驟:①、繪制視圖的背景;②、保存畫布的圖層(Layer);③、繪制View的內容;④、繪制View子視圖,如果沒有就不用;⑤、還原圖層(Layer);⑥、繪制滾動條。

7.activity的生命周期???

    Activity生命周期方法主要有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()方法。

    啟動一個A Activity,分別執行onCreate()、onStart()、onResume()方法。

    從A Activity打開B Activity分別執行A onPause()、B onCreate()、B onStart()、B onResume()、A onStop()方法。

    關閉B Activity,分別執行B onPause()、A onRestart()、A onStart()、A onResume()、B onStop()、B onDestroy()方法。

    橫豎屏切換A Activity,清單文件中不設置android:configChanges屬性時,先銷毀onPause()、onStop()、onDestroy()再重新創建onCreate()、onStart()、onResume()方法,設置orientation|screenSize(一定要同時出現)屬性值時,不走生命周期方法,只會執行onConfigurationChanged()方法。

    Activity之間的切換可以看出onPause()、onStop()這兩個方法比較特殊,切換的時候onPause()方法不要加入太多耗時操作否則會影響體驗。

技術分享圖片

8.android的數據存儲???

            使用SharedPreferences存儲數據;它是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數據存儲到設備中。只能在同一個包內使用,不能在不同的包之間使用。

            文件存儲數據;文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。

            SQLite數據庫存儲數據;SQLite是Android所帶的一個標準的數據庫,它支持SQL語句,它是一個輕量級的嵌入式數據庫。

            使用ContentProvider存儲數據;主要用於應用程序之間進行數據交換,從而能夠讓其他的應用保存或讀取此Content Provider的各種數據類型。

            網絡存儲數據;通過網絡上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網絡空間中的數據信息。

9.Activity啟動模式???

            standard:標準模式,也是系統默認的啟動模式。假如 activity A 啟動了 activity B , activity B 則會運行在 activity A 所在的任務棧中。而且每次啟動一個 Activity ,都會重新創建新的實例,不管這個實例在任務中是否已經存在。

             singleTop:棧頂復用模式。假如 activity A 啟動了 activity B ,就會判斷 A 所在的任務棧棧頂是否是 B 的實例。如果是,則不創建新的 activity B 實例而是直接引用這個棧頂實例,同時 onNewIntent 方法會被回調,通過該方法的參數可以取得當前請求的信息;如果不是,則創建新的 activity B 實例。

            singleTask:棧內復用模式。在第一次啟動這個 Activity 時,系統便會創建一個新的任務,並且初始化 Activity 的實例,放在新任務的底部。不過需要滿足一定條件的。那就是需要設置 taskAffinity 屬性。

            singleInstance:單實例模式。這個是 singleTask 模式的加強版,它除了具有 singleTask 模式的所有特性外,它還有一點獨特的特性,那就是此模式的 Activity 只能單獨地位於一個任務棧,不與其他 Activity 共存於同一個任務棧。

10.廣播註冊???

            首先寫一個類要繼承BroadCastReceiver

            第一種:在清單文件中聲明,添加 第二種:使用代碼進行註冊如:

    <receive android :name ="BroadCastReceiverDemo">

        <intent-filter>

            <action android:name="android.provider.Telephony.SMS_RECEIVED">

        </intent-filter>

    </receiver>

            第二種:使用代碼進行註冊如:

    IntentFilter filter = new    IntentFilter("android.provider.Telephony.SMS_RECEIVED");

    BroadCastReceiverDemo receiver = new BroadCastReceiver();

    registerReceiver(receiver, filter);

            兩種註冊類型的區別是:

    第一種是常駐型廣播,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。

    第二種不是常駐廣播,也就是說廣播跟隨程序的生命周期。 

Android 面試題總結