先記下大體題目,持續補充。設計模式
onCreate() 建立活動,作一些數據初始化操做瀏覽器
onStart() 由不可見變爲可見性能優化
onResume() 能夠與用戶進行交互,位於棧頂網絡
onPause() 暫停,啓動或恢復另外一個活動時調用app
onStop() 中止,變爲不可見佈局
onDestroy() 銷燬性能
onRestart() 由中止狀態變爲運行狀態優化
①.standard模式spa
a.Activity的默認啓動模式線程
b.每啓動一個Activity就會在棧頂建立一個新的實例。例如:鬧鐘程序
缺點:當Activity已經位於棧頂時,而再次啓動Activity時還須要在建立一個新的實例,不能直接複用。
②.singleTop模式
特色:該模式會判斷要啓動的Activity實例是否位於棧頂,若是位於棧頂直接複用,不然建立新的實例。 例如:瀏覽器的書籤
缺點:若是Activity並未處於棧頂位置,則可能還會建立多個實例。
③.singleTask模式
特色:使Activity在整個應用程序中只有一個實例。每次啓動Activity時系統首先檢查棧中是否存在當前Activity實例,若是存在
則直接複用,並把當前Activity之上全部實例所有出棧。例如:瀏覽器主界面
④.singleInstance模式
特色:該模式的Activity會啓動一個新的任務棧來管理Activity實例,而且該勢力在整個系統中只有一個。不管從那個任務棧中啓動該Activity,都會是該Activity所在的任務棧轉移到前臺,從而使Activity顯示。主要做用是爲了在不一樣程序中共享一個Activity
Serializable | Parcelable | |
---|---|---|
原理 | 將對象進行序列化,將一個對象轉換成可存儲或可傳輸的狀態。能夠在網絡上進行傳輸,也能夠存儲到本地。 | 將一個完整的對象進行分解,分解後的每一部分都是Intent所支持的數據類型。 |
存儲媒介 | 使用IO讀寫存儲在硬盤上 | 直接在內存中讀寫,很明顯內存的讀寫速度一般大於IO讀寫 |
實現 | 使用反射,序列化和反序列化過程須要大量 I/O 操做 | 本身實現封送和解封(marshalled &unmarshalled)操做不須要用反射,數據也存放在 Native 內存中,效率要快不少。 |
性能 | 使用了反射,序列化的過程較慢,並會產生大量的臨時變量,從而引發頻繁的GC。 | 更優 |
Activity調用dispathTouchEvent()方法,把事件傳遞給Window;
Window再將事件交給DecorView(DecorView是View的根佈局);
DecorView再傳遞給ViewGroup;
Activity ——> Window ——> DecorView ——> ViewGroup——> View
dispatchTouchEvent() 分發
onInterceptTouchEvent() 攔截 ,只有ViewGroup獨有此方法
onTouchEvent() 處理觸摸事件
onResume
複製代碼
攔截器使用什麼設計模式?
複製代碼
第一點: 若是隻是想避免OutOfMemory異常的發生,則能夠使用軟引用。 若是對於應用的性能更在乎,想盡快回收一些佔用內存比較大的對象,則能夠使用弱引用。
第二點: 能夠根據對象是否常常使用來判斷選擇軟引用仍是弱引用。 若是該對象可能會常常使用的,就儘可能用軟引用。 若是該對象不被使用的可能性更大些,就能夠用弱引用。
https://www.jianshu.com/p/d126640eccb1
複製代碼
ART虛擬機是在Android5.0纔開始使用的
複製代碼
https://www.jianshu.com/p/b3b09fa29f65
複製代碼