如果我是Android面試官一
工作馬上就要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完全一致時才能能夠響應。
相關文章
- 如果我是Android面試官二Android面試
- 如果我是推薦演算法面試官,我會問哪些問題?演算法面試
- 面試官問我HTTP,我真的是面試HTTP
- 面試官問我Redis叢集,我真的是面試Redis
- 面試官問我MySQL調優,我真的是面試MySql
- 我是如何用 ThreadLocal 虐面試官的?thread面試
- 我不是一個合格的面試官面試
- 我曾經是怎麼做面試官的面試
- 《我是面試官》設計模式-單例模式面試設計模式單例
- 面試官問我MySQL索引,我面試MySql索引
- 當面試遇到 Redis,我作為一個面試官是這麼“刁難”你的!面試Redis
- 面試官問我JVM記憶體結構,我真的是面試JVM記憶體
- 假如我是面試官,我會這樣虐你面試
- 『假如我是面試官』RabbitMQ我會這樣問面試MQ
- 面試官問我:什麼是JavaScript閉包,我該如何回答面試JavaScript
- 面試官:Java 反射是什麼?我回答不上來!面試Java反射
- 面試官:你給我說一下什麼是時間輪吧?面試
- 面試官:完全揹包都不會,是你自己走還是我送你?面試
- 面試官,你再問我 Bit Operation 試試?面試
- 美團面試官問我: ZGC 的 Z 是什麼意思面試GC
- 如果我是一線技術主管……
- 面試官:說一說如何優雅的關閉執行緒池,我:shutdownNow,面試官:粗魯!面試執行緒
- 面試官!讓我們聊聊正則面試
- Android面試(一)Android面試
- "instanceof 的原理是什麼"?大聲告訴面試官,我知道!面試
- 如果我是python高手Python
- 面試官問我JVM調優,我忍不住了!面試JVM
- 面試官讓我回去把基礎搞紮實,含淚狂刷Android基礎面試118題面試Android
- HashMap?面試?我是誰?我在哪?HashMap面試
- 面試官:要不我們聊一下“心跳”的設計?面試
- 面試官問我,使用Dubbo有沒有遇到一些坑?我笑了。面試
- 面試官問我TCP三次握手和四次揮手,我真的是面試TCP
- 面試官問我按鈕級別許可權怎麼控制,我說v-if,面試官說再見面試
- 面試官是如何篩選簡歷?面試
- 面試官:ZAB協議是什麼?面試協議
- 面試官:啥是請求重放呀?面試
- 當面試官問我JDK Semaphore的原理時,我笑了面試JDK
- 面試官問我會不會Elasticsearch,我語塞了...面試Elasticsearch