一、Android基礎
1. basic
- Serializable和Parcelable區別
一個簡單,但效率低;
一個高效,但使用麻煩。
世事兩難全呀。
2. 組件
2.1 Activity
1)Activity lifecycle
onCreate() 創建活動,做一些數據初始化操作
onStart() 由不可見變爲可見
onResume() 可以與用戶進行交互,位於棧頂
onPause() 暫停,啓動或恢復另一個活動時調用
onStop() 停止,變爲不可見
onDestroy() 銷燬
onRestart() 由停止狀態變爲運行狀態
2) Activity的啓動方式
①.standard模式
a.Activity的默認啓動模式
b.每啓動一個Activity就會在棧頂創建一個新的實例。例如:鬧鐘程序
缺點:當Activity已經位於棧頂時,而再次啓動Activity時還需要在創建一個新的實例,不能直接複用。
②.singleTop模式
特點:該模式會判斷要啓動的Activity實例是否位於棧頂,如果位於棧頂直接複用,否則創建新的實例。 例如:瀏覽器的書籤
缺點:如果Activity並未處於棧頂位置,則可能還會創建多個實例。
③.singleTask模式
特點:使Activity在整個應用程序中只有一個實例。每次啓動Activity時系統首先檢查棧中是否存在當前Activity實例,如果存在
則直接複用,並把當前Activity之上所有實例全部出棧。例如:瀏覽器主界面
④.singleInstance模式
特點:該模式的Activity會啓動一個新的任務棧來管理Activity實例,並且該勢力在整個系統中只有一個。無論從那個任務棧中啓動該Activity,都會是該Activity所在的任務棧轉移到前臺,從而使Activity顯示。主要作用是爲了在不同程序中共享一個Activity
3) onCreateMenuOption 在Activity哪個生命週期被調用到?
onResume
4)Activity & Window
3. Binder機制
這塊內容好多。。
先來個圖看看,哈哈。
系統結構圖。
4. Handler
先放點圖
5. View
1) View 事件傳遞
Activity調用dispathTouchEvent()方法,把事件傳遞給Window;
Window再將事件交給DecorView(DecorView是View的根佈局);
DecorView再傳遞給ViewGroup;
Activity ——> Window ——> DecorView ——> ViewGroup——> View
ViewRoot只是ViewTree的管理者,和View沒有關係, 真正的根結點是DecorView。
2)事件分發的主要有三個關鍵方法
dispatchTouchEvent() 分發
onInterceptTouchEvent() 攔截 ,只有ViewGroup獨有此方法
onTouchEvent() 處理觸摸事件
二、Android進階
1. app啓動
大神的圖。
開機啓動過程:
app啓動過程:
2. 網絡庫
1) Okhttp和Retrofit
攔截器使用什麼設計模式?
3. 內存優化
第一點: 如果只是想避免OutOfMemory異常的發生,則可以使用軟引用。 如果對於應用的性能更在意,想盡快回收一些佔用內存比較大的對象,則可以使用弱引用。
第二點: 可以根據對象是否經常使用來判斷選擇軟引用還是弱引用。 如果該對象可能會經常使用的,就儘量用軟引用。 如果該對象不被使用的可能性更大些,就可以用弱引用。
4. ANR的原因
5. 如何統計頁面楨率,app流暢?
https://www.jianshu.com/p/d126640eccb1
6. 5.0以前,7.0,8.0的系統,安裝app的速度比較
7. app性能優化
https://www.jianshu.com/p/b3b09fa29f65
8. 內存泄露
- Handler 引起的內存泄漏
- 單例模式引起的內存泄漏
- 非靜態內部類創建靜態實例引起的內存泄漏
- 非靜態匿名內部類引起的內存泄漏
- 註冊/反註冊未成對使用引起的內存泄漏
- 資源對象沒有關閉引起的內存泄漏
- 集合對象沒有及時清理引起的內存泄漏
三、設計模式
1. 單例
文章已經收錄於我的【Github】項目,另外還整理了一份Android中高級面試複習核心知識點文檔,想做參考的朋友可以去我的【Github】查閱。歡迎Star!