今天看到一個觀念,測試的能力大致可以劃分為三個能力層次:發現問題、定位問題、預防問題。
發現問題各種方式方法,比如邊界值等;
定位問題要求測試綜合能力強,比如業務熟悉、程式碼熟悉、平臺(Liunx系統、Android系統)熟悉等均有很強烈的要求;
感覺目前連發現問題的能力都還有所欠缺。。不過個人覺得,對於業務、程式碼、平臺的熟悉度提高,對於發現問題的能力也是有很大提升的,畢竟對於測的業務都不瞭解,怎麼知道覆蓋情況呢。
Android 系統架構
由下至上依次是:1、Linux核心層
Android是基於Liunx核心的,Linux核心提供了安全性、記憶體管理、程式管理、網路協議和驅動模型等核心系統服務。Linux核心層為各種硬體提供了驅動程式,如顯示驅動、相機缺洞、藍芽驅動、電池管理等等。
2、硬體抽象層(Hardware Abstraction Layer)
Android的硬體抽象層,簡單來說,就是對Linux核心驅動程式的封裝,向上提供介面,遮蔽底層的實現細節。HAL可定義一個標準介面以供硬體供應商實現,這可讓Android忽略較低階別的驅動程式實現。
3、Android系統執行層
這一層包括Android Runtime和原生態的C/C++庫。
通過C或者C++庫為Android系統提供主要的特性支援,例如Surface Manager管理訪問顯示子系統和從多模組應用中無縫整合2D和3D的圖形,WebKit提供了瀏覽器支援等。可以使用Android DNK直接訪問某些原生態庫。
Android執行時,其中包括了ART虛擬機器(Andriod 5.0之前是Dalvik虛擬機器,ART模式與Dalvik模式最大的不同在於,在啟用ART模式後,系統在安裝應用的時候會進行一次預編譯,在安裝應用程式時會先將程式碼轉換為機器語言儲存在本地,這樣在執行程式時就不會每次都進行一次編譯了,執行效率也大大提升。如果您的應用在ART上執行效果很好,那麼它應該也可在Dalvik上執行,但反過來不一定。)每個Java程式都執行在ART虛擬機器上,該虛擬機器專門針對移動裝置進行了定製,每個應用都有自己的Andriod Runtime(ART)例項。此外,Android執行時還包含一套核心執行時庫,可提供Java API框架使用的Java程式語言大部分功能,包括一些Java 8語言功能。
4、Java API框架層
這一層主要提供了構建應用程式時可能用到的各種API,開發者通過這一層的API構建自己的APP,這一層也是APP開發人員必須要掌握的內容。
5、系統應用層
所有安裝在手機上的系統應用都屬於這一層,使用者自己開發的應用也屬於這一層。
Android四大元件
1、activity(介面):用來顯示Android的程式介面,一個activity通常就是一個單獨的螢幕(視窗)。
2、service(服務):沒有介面的後臺服務,會一直執行在後臺。常被用來做資料處理,也可以做一些定時的任務。
3、content provider(資料交換):直譯為內容提供者,它是用在不同的應用程式之間共享資料時,可以把一個應用的資料提供給其他的應用使用。
4、broadcast receiver(廣播):廣播接收器,在廣播機制中充當廣播的接收者的作用,Android中充滿了各種廣播,所有需要有選擇地接收一些有用的廣播,然後處理這些廣播。
Activity生命週期
activity的四個狀態
running->paused->stopped->killed
- running->當前顯示在螢幕的activity(位於任務棧的頂部),使用者可見狀態。
- paused->依舊在使用者可見狀態,但是介面焦點已經失去,此activity無法與使用者進行互動。
- stopped->使用者看不到當前介面,也無法與使用者進行互動,完全被覆蓋。
- killed->當前介面被銷燬,等待被系統回收。當一個Activity處於暫停狀態或者停止狀態時就隨時可能進入死亡狀態,因為系統可能因記憶體不足而強行結束該activity。 關於activity四個狀態所在的生命週期:
activity生命週期過程
主要有7個方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()、onDestory()。
onCreate():當我們點選activity的時候,系統會呼叫activity的oncreate()方法,在這個方法中我們會初始化當前佈局setContentLayout()方法。
onStart():onCreate()方法完成後,此時activity進入onStart()方法,當前activity是使用者可見狀態,但沒有焦點,與使用者不能互動,一般可在當前方法做一些動畫的初始化操作。
onResume(): onStart()方法完成之後,此時activity進入onResume()方法中,當前activity狀態屬於執行狀態 (Running),可與使用者進行互動。
onPause():當另外一個activity覆蓋當前的acitivty時,此時當前activity會進入到onPause()方法中,當前activity是可見的,但不能與使用者互動狀態。
onStop():onPause()方法完成之後,此時activity進入onStop()方法,此時activity對使用者是不可見的,在系統記憶體緊張的情況下,有可能會被系統進行回收。所以一般在當前方法可做資源回收。
onDestory():onStop()方法完成之後,此時activity進入到onDestory()方法中,結束當前activity。
onRestart():onRestart()方法在使用者按下home()之後,再次進入到當前activity的時候呼叫。呼叫順序onPouse()->onStop()->onRestart()->onStart()->onResume().
複製程式碼
activity的程式優先順序
前臺程式>可見程式>service程式>後臺程式>空程式
前臺程式:
1、當前程式activity正在與使用者進行互動。
2、當前程式service正在與activity進行互動或者當前service呼叫了或者當前service呼叫了startForground()屬於前臺程式或者當前service正在執行生命週期(onCreate()、onStrat()、onDestory())
3、程式持有一個Broadcast Receiver,這個Broadcast Receiver正在執行onReceive()方法
可見程式:
1、程式持有一個activity,這個activity不在前臺,處於onPause()狀態下,當前覆蓋的activity是以dialog形式存在的。
2、程式有一個service,這個service和一個可見的activity進行繫結
後臺進行: activity的onStop()被呼叫,但是onDestory()沒有呼叫的狀態。該程式屬於後臺程式。
空程式: 該程式沒有任何執行的資料了,且保留在記憶體空間,並沒有被系統killed,屬於空程式。該程式很容易被殺死。
Service生命週期
Service(服務)是一個一種可以在後臺執行長時間執行操作而沒有使用者介面的應用元件。服務可由其他應用元件啟動(如Activity),服務一旦啟動將在後臺一直執行,即使啟動服務的元件(Activity)已銷燬也不受影響。 Service生命週期,從它被建立開始,到它被銷燬為止,可以有兩條不同的路徑:
通常分為兩種服務:
- 本地服務,Local Service用於應用程式內部。在Service可以呼叫Context.startService()啟動,呼叫Context.stopService()結束。 在內部可以呼叫Service.stopSelf() 或 Service.stopSelfResult()來自己停止。無論呼叫了多少次startService(),都只需呼叫一次 stopService()來停止。
- 遠端服務,Remote Service 用於android系統內部的應用程式之間。可以定義介面並把介面暴露出來,以便其他應用進行操作。客戶端建立到服務物件的連線,並通過那個連線來呼叫服 務。呼叫Context.bindService()方法建立連線,並啟動,以呼叫 Context.unbindService()關閉連線。多個客戶端可以繫結至同一個服務。如果服務此時還沒有載入,bindService()會先載入它。
總結:
- 如果service是被開啟的,那麼它的活動生命週期和整個生命週期一同結束。
- 如果service是被繫結的,它們它的活動生命週期是在onUnbind()方法返回後結束。