Android面試總結

2021-07-12 04:49:24 字數 2502 閱讀 3848

最近一直在面試,總結一些常碰到的問題
1. 四大元件

1)activity

生命週期:oncreate()->onstart()->onresume()->onpause()->onstop()->ondestroy()

啟動方式:

a.stardard 同個任務棧新建不同例項

b.singletop 若當前例項處於棧頂,則直接呼叫;否則,新建例項

c.singletask 相同棧內多例項,例項唯一

d.singleinstance 每個任務棧中只有乙個例項

2)service

啟動方法:

a.startservice

生命週期:oncreate()->onstart()->ondestory()

不管啟動多少次,oncreate()只呼叫一次

b.bindservice

生命週期:oncreate()->onbind()->onunbind()->ondestory()

螢幕旋轉時,service重新啟動,重新走一遍上述生命週期

3)broadcastreciver

註冊方式,區別

2. listview優化方案

1)復用convertview:判斷convertview是否為null,若為null,則新建;否則,直接引用

2)給convertview設定tag,傳入viewholder物件,用於快取資料,達到影象資料非同步載入的效果

3)資料量大的情況下,實現分頁載入(如何分頁,如何判斷到頁底:position等於資料集大小)

4)有載入則壓縮

3. handler機制

a.handler傳送msg,looper物件從訊息佇列(message queue)讀取msg物件進行處理,並把msg交給handler,handler讀取並進行ui更新

b.非主線程建立handler,需要加looper.prepare()

4. 自定義控制項步驟

1)自定義屬性,attr.xml

2)在view的構造方法中獲得自定義屬性

3)測量onmesure()

4)布局onlayout(viewgroup)

5)繪製ondarw(canvas的使用)

6)互動動作ontouchevent

7)onintercepttouchevent(viewgroup)

onmeasure中:

measurespec的specmode:

1)exactly:match_parent使用

2)at_most:wart_content使用

3)unspecified

測量完畢後使用setmeasureddimension

5. 記憶體洩露的原因

1)資源物件未關閉(cursor,file等)

2)構建adapter沒有使用convertview

3)bitmap未使用時沒釋放(使用bm.recycle)

5)廣播註冊沒取消

6)hanler應宣告為靜態物件,並在其內部類中儲存乙個對外部類的弱引用

弱引用:不論記憶體空間是否不足,都會**記憶體

軟引用:記憶體空間不足時,**記憶體;否則,不**

6. 解決oom常用方案

2)調整影象大小,做壓縮處理

3)及時**影象(bm.recycle)

4)自定義堆記憶體分配大小,優化dalvik虛擬機器堆記憶體分配

7. 壓縮(按比例壓縮)

1)讀入,把bitmapfactory.options.injustdescodebounds賦值true,使得bitmap通過路徑獲得資訊但不佔記憶體

2)根據option.outwidth和outheight獲取長高

3)設insamplesize縮放比例,調節decode原圖的所需的記憶體

4)重新讀入decodefile

8. anr如何避免

1)執行在主線程裡的任何方法都盡可能少做事情

2)避免在broadcastrecever中做耗時操作,若有耗時工作,應在recevier中啟動service

3)使用notification manager,避免在intent recevier裡啟動acitivity

9. 物件序列化

1.parcelable:android獨有,更高效,但是需要實現部分方法

2.serializable:jre普遍所有,相容性更好,但是效率較低

3.參考:

Android面試總結

面試中遇到的問題 http 1 listview的非同步載入 更好的系統 變數,監聽listview的滾動狀態,scroll state fling,scroll state idle scroll state touch scroll 比例壓縮,執行緒池控制oom,兩篇文章 2 listview ...

Android面試總結

1.intent如何傳遞物件?bundle 就目前所知道的有兩種方法,一種是bundle.put serializable key,object 另一種是bundle.putparcelable key,object 當然這些object是有一定的條件的,前者是實現了 serializable 介面...

Android面試總結

近期我司招聘,我去面了一些android開發的哥們,以下由近期面試總結得出的體會,以技術面試60分鐘為基準,根據我去面試和面試別人的經驗,我把整個面試流程大概規劃為以下幾個部分 這裡就是簡歷上的基本資訊,基本上只要表達能清晰流利就可以了,噢,據小夥伴說有可能還要看一眼是不是 老鄉 雖然我完全不理解這...