Android 面試題總結
阿新 • • 發佈:2018-07-11
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 面試題總結