如果我是Android面試官一

ShanLiang_Build發表於2018-05-26

工作馬上就要3年了,相比於同行的很多朋友,我的成長還是太慢,最近也是絞盡腦汁想要提升自己。但是這一行似乎也沒有什麼捷徑, 只有不斷地學習與總結才能提高自己吧。給自己挖個坑,希望自己能夠慢慢填上,相信等到填好坑的那一天我一定會有所提升。

作為一名android開發,如果公司讓你去面試求職者,你都會問哪些問題呢。當公司安排我去面試一個人的時候,老實說我也不知道該問些什麼,所以開坑一個面試官系列,總結一些android相關的知識。如果我是android面試官,我會問哪些問題。


一 來聊一聊Activity的生命週期吧

Android是使用任務(Task)來管理活動的,一個任務就是一組存放在棧裡的活動的集合,這個棧也被稱為返回棧(Back Stack)。每當我們啟動一個新的活動,它會在返回棧中入棧,並處於棧頂位置。當我們按下back鍵或呼叫finish方法去銷燬一個活動時,處於棧頂的活動會出棧,這時前一個入棧的活動會重新處於棧頂。系統總是會顯示處於棧頂的活動給使用者。

Activity的四種狀態

1 執行狀態

當一個活動處於返回棧的棧頂時,就處於活動狀態。

2 暫停狀態

當一個活動不再處於棧頂,但是仍然可見時,活動就進入了暫停狀態。

3 停止狀態

當一個活動不再處於棧頂位置,並且完全不可見的時候,就處於停止狀態。

4 銷燬狀態

當一個活動從返回棧中移除,就變成了銷燬狀態。


Activity中定義了7個回撥方法,覆蓋了活動的生命週期每一個環節。

1 onCreate 此方法會在第一次建立活動時呼叫,應該在裡面完成初始化操作,如載入佈局等等。

2 onStart 這個方法在活動由不可見變為可見時呼叫

3 onResume 這個方法在活動準備好和使用者互動時呼叫,此時活動一定處於棧頂,並處於執行狀態。

4 onPause 這個方法在活動準備啟動或恢復另一個活動時呼叫。

5 onStop 這個方法在活動變為完全不可見時呼叫

6 onDestroy 這個方法在活動被銷燬前呼叫,之後活動狀態變為銷燬。

7 onRestart 這個方法在活動由停止狀態變為執行狀態之前呼叫,也就是活動被重新啟動了。


活動在onCreate和onDestroy方法之間經歷的叫做完整生存期。

活動在onStart和onStop之間經歷的叫可見生存期

活動在onResume和onPause方法之間經歷的叫前臺生存期


順帶一提,有些時候我們想保證一些重要資訊,在活動不慎被系統回收後建立時儲存,可以使用onSaveInstanceState方法,將資訊存在bundle中。在下一次活動建立時,可以取到這些資訊恢復。


二 既然聊到這,在說說Activity的啟動模式。

活動的啟動模式一共有四種,分別是standard,singleTop,singleTask和singleInstance。可以在AndroidManifest.xml檔案中通過給activity標籤指定launchMode來設定。

1 standard 模式

此模式是activity的預設啟動模式。此模式下每啟動一個活動,都會在返回棧中入棧,並處於棧頂位置。使用此模式的活動,當需要建立時,系統不會檢查之前是否建立過,每次都建立一個新的。

2 singleTop 模式

此模式下,當系統發現活動已經在棧頂,建立一個新活動時,就會直接用棧頂的活動。但是當活動不處於棧頂時,建立時仍然會建立新的活動例項。

3 singleTask 模式

使用此模式可以很好地解決反覆建立的問題。但是此模式使用時需要注意,當活動不處於棧頂時,再次建立活動時會直接將活動推至棧頂,並且將此活動之上的所有活動出棧。

4 singleInstance 模式

此模式不同於以往三個模式。此模式下會啟用一個新的返回棧來管理這個活動。此模式可以用於其他程式相與當前程式共享這個活動例項時使用。


三 Intent顯示和隱式的區別

Intent有多個建構函式,我們使用最常見的Intent建構函式,傳入所需引數,再將intent傳入Activty類中提供的startActivity方法中就能啟動活動了。這種新建Intent呼叫startActivity的方法稱為顯示呼叫。

那麼隱式Intent是什麼。通過AndroidManifest檔案中,activity標籤下配置intent-filter內容,可以指定當前活動能夠響應的action和category。在action標籤中我們指明當前活動可以響應的action,而category中包含了一些附加資訊,更精確的指明瞭活動能響應的的Intent中還可能帶有的category。只有action和category中的內容同時能夠匹配上Intent中的對應引數時,活動才能響應Intent。

除此之外,我們還可以在intent-filter中再配置一個data標籤,用於更精確的指定當前活動能夠響應的Intent。data標籤中可以配置一下內容。scheme,用於指定資料的協議部分。host,用於指定資料的主機名部分。port,用於指定資料的埠部分。path,用於指定主機名和埠之後的部分。mimeType,用於指定可以處理的資料型別。只有data標籤中指定的內容和Intent中攜帶的data完全一致時才能能夠響應。




相關文章