1. 程式人生 > >Android面試 - Activity相關會問些什麼

Android面試 - Activity相關會問些什麼

Activity相關會問些什麼

本文包括以下內容(針對Android面試,部分細節略去):
1. Activity生命週期
2. Activity四種啟動模式及其應用場景
3. IntentFilter匹配規則

(Activity和Fragment、Service互動會在其他文章中寫到)

更多Android面試相關請點選
- 四步準備Android面試
- Android開發概要
- 大疆提前批第一次電面
- 大疆提前批第二次電面
- 大疆提前批終面
- 大疆提前批終面後加面

1. Activity生命週期

 Activity生命週期

onStart、onStop代表著應用是否可見
onResume、onPause代表應用是否在前臺

啟動A: onCreate -> onStart -> onResume
A啟動B:A.onPause -> A.onStop (如果B採用透明主題,則A.onStop不會呼叫)
啟動B後,返回A:onRestart -> onStart -> onResume
back鍵:onPause -> onStop -> onDestroy
A啟動B,A的onPause執行之後,B才啟動。在onPause之中做輕量級工作,能加快B的啟動速度

onSaveInstanceState(onStop之前呼叫,和onPause沒有必然的先後順序)
onRestoreInstanceState(onStart之後呼叫,和onResume沒有必然的先後順序)
以上兩個方法呼叫條件:
- 應用被殺死
- 配置改變(比如手機方向,新增android:configChanged屬性後不會觸發,會呼叫onConfiguration函式)
- Home鍵、啟動新Activity(單獨觸發onSaveInstanceState)

2. Activity啟動模式

四種模式可根據字面意思理解,不過還要注意一些細節
- standard 標準模式:
- 每次啟動會建立一個新的Activity
- A啟動B,B會位於A的棧中
- 預設的啟動模式
- singleTop 棧頂複用模式
- 要啟動的Activity在棧頂則直接使用,不建立新的Activity
- 第二次啟動在棧頂,會呼叫onNewIntent、onResume方法,onCreate、onStart不會呼叫
- singleTask 棧內複用模式
- 要啟動的Activity在棧內則直接使用,不建立新的Activity
- 第二次啟動在棧頂,會呼叫onNewIntent、onResume方法,onCreate、onStart不會呼叫
- 可通過TaskAffinity屬性指定要啟動的Activity將位於的棧名
- 具有clearTop效果:在棧內,要啟動的A之上有B、C,會讓B、C出棧,然後複用A
- singleInstance 單一例項模式
- 要啟動的Activity會新建一個棧,並且此Activity會獨佔這個棧

注:可以使用 adb shell dumpsys Activity 檢視Activity棧資訊,來分析Activity啟動時棧的情況

應用場景
- standard:Activity預設模式,一般Activity都用這個
- singleTop:當外界多次跳轉到一個頁面是可以使用這個模式,比如從一些下拉欄通知介面點選進入一個頁面的情景,避免了因為多次啟動導致的需要返回多次的情況
- singleTask:可用於應用的主介面,比如瀏覽器主頁,外界多次啟動時不會受子頁面干擾,clearTop效果也會清楚主頁面之上的頁面
- singleInstance:可用於和程式分離的頁面,比如通話頁面、鬧鈴提醒頁面

注:在A -> B -> C 時,B不要採用singleInstance,否則,退出再開啟時,會是B頁面(此屬性未驗證)

3. IntentFilter匹配規則

Intent隱式啟動的三個屬性:action、category、data

匹配規則
action:程式碼中有一個及以上與“xml過濾規則”中的相同即可
category:程式碼中所有的必須與“xml過濾規則”中的相同
data:同action

注:
程式碼中隱式啟動時,會預設新增android.intent.category.DEFAULT,所以xml必須含有此屬性才能隱式啟動
Service儘量採用顯示啟動

如有任何遺漏或錯誤,歡迎反饋

版權宣告
本文首發自簡書:
搜尋作者:QinGeneral
無需授權即可轉載,甚至無需保留以上版權宣告;
轉載時請務必註明作者。