面試知識點總結之Android

1. Activity的四種啓動方式

設置:在AndroidManifest.xml中<activity>標籤設置android:launchMode屬性

  • standard:默認模式,默認創建一個新的實例
  • singleTop:棧頂複用模式,若啓動的Activity已位於棧頂,不會重新創建,而調用其onNewIntent方法(適合接收通知啓動的內容顯示頁面,如新聞內容頁面)
  • singleTask:棧內複用模式,若存在會將其上的其他Activity銷燬並調用onNewIntent(作爲程序入口點,如瀏覽器主界面)
  • singleInstance:單實例模式,會單獨位於一個任務棧中(適合與程序分離的頁面,如鬧鈴提醒)

2. Android消息機制

(1)Looper.prepare()在本線程中保存一個Looper實例,其中保存一個MessageQueue對象
(2)Looper.loop()會讓當前線程進入一個無限循環,不斷從MessageQueue中讀取消息,回調msg.target.dispatchMessage(msg)方法
(3)Handler的構造方法會得到當前線程中的Looper實例,進而關聯其中的MessageQueue
(4)Handler的sendMessage()方法會將msg.target賦值爲handler自身,再加入MessageQueue中
(5)構造Handler實例時我們會重寫handleMessage()方法,即msg.target.dispatchMessage(msg)最終調用的方法

3. Service和IntentService的區別

Service:當應用程序被掛到後臺時,爲保證某些組件仍可工作而引入了service,它依賴於應用程序的主線程,耗時邏輯和操作會引起ANR
IntentService:繼承於Service,在onCreate時內部開啓了一個線程執行耗時操作,完成後會清理線程並關閉服務。
(1)創建了一個獨立的工作線程來處理所有傳遞給服務的intents(通過onStartCommand()
(2)創建了一個工作隊列,逐個發送intent給onHandleIntent()
(3)無需主動調用stopSelf()來結束服務,所有intent處理完後會自動關閉服務
(4)默認實現的onBind()返回null
(5)默認實現的onStartCommand()的目的是將intent插入到工作隊列中

4. 自定義view的幾種方式

(1)組合空間:講幾個控件組合成爲新的控件,如自定義標題欄
(2)自繪控件:繼承View重寫onDraw()方法,用於實現一些不規則的效果
(3)繼承控件:繼承已有的控件,擴展其功能

5. Android動畫的幾種方式

(1)視圖動畫:也叫Tween補間動畫,可在一個視圖容器內執行一系列簡單變換(位置、大小、旋轉、透明度等),使用插值器Interpolator改變動畫播放速率

  • ScaleAnimation 縮放動畫
  • TranslateAnimation 位移動畫
  • RotateAnimation旋轉動畫
  • AlphaAnimation 透明度動畫

(2)幀動畫AnimationDrawable:通過多張Drawable實現像幻燈片一樣的效果

<animation-list>
	<item
		android-drawable="mipmap/pic"
		android-duration="500"/>
<animation-list>

(3)屬性動畫:修改控件的屬性實現的動畫

  • ValueAnimator:一個特定時間內執行一個動畫
  • TimeAnimator:時序監聽回調工具
  • ObjectAnimator:一個對象的一個屬性動畫
  • AnimatorSet:動畫集合

6. 進程間通信方式

(1)Bundle:四大組件間傳遞數據
(2)文件共享:適用併發程度不高,實時性要求不高,如緩存共享
(3) AIDL:遠程服務跨進程通信的一種方式
(4)Messenger:通過message進行傳輸,低併發的一對多及時通信
(5)ContentProvider:一對多的進程間數據共享
(6)Socket:網絡數據交換

7. 線程間通信方式

(1)共享內存(變量)
(2)文件、數據庫
(3)Handler
(4)Java中的wait()notify(),notifyAll()

8. 更新UI的幾種方式

(1)runOnUiThread(Runnable)
(2)View.post(Runnalbe)/new Handler.post(Runnable)
(3)使用Handler
(4)使用AsyncTask

9. 序列化相關,如何序列化,爲什麼要序列化

  • 序列化的目的
    (1)永久保存對象數據(保存於文件中等)
    (2)將對象數據在網絡上傳輸(對象數據轉換爲字節流)
    (3)將對象數據在進程間傳遞(intent.putExtra("name", user), budle.putSerializable("name", user))

  • 如何序列化
    (1)實現Serializable接口,聲明即可。
    指定一個serialVersionUID用於輔助序列化和反序列化
    (2)實現Parcelable接口,聲明+實現內部相應方法

10. 觸摸事件傳遞流程

傳遞:Activity→ViewGroup→View
處理:View→ViewGroup→Activity
在未重寫任何方法的情況下,觸摸事件的派遣將不會被截斷,自上而下派遣到葉子View,調用該View的onTouchEvent()(若註冊了監聽器,則優先調用onTouchListener.onTouch(),返回false纔會調用onTouchEvent())。如果該View不能處理事件(onTouchEvent()返回false),其父視圖繼續嘗試處理,直到最後調用Activity的onTouchEvent()方法。

11.數據持久化

(1)文件存儲
(2)SharedPreferences存儲
(3)SQLite數據庫存儲

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