關於Activity面試的詳解

話不多說,直接進入正題.

一、activity生命週期

首先,什麼是activity?大家會不會突然覺得發懵,大家注意,在日常生活中,安卓是與用戶交互的,它提供了一個界面,讓用戶可以進行點擊,各種滑動操作,這就是activity的意義,很簡單,大家一定要知道,我只是給大家重複一下.接下來,我們看activity的部分

1.activity的4種狀態

running狀態:表明activity是處於活動狀態的,用戶可以點擊屏幕,然後做出相應,它是一個處於Activity棧頂的一個狀態.

paused狀態:表明activity失去焦點的時候,或者是被一個非全屏的activity佔據,或者有一種情況是它被透明的activity放置在棧頂,這種情況下,它會處於paused狀態,(需要注意的是:這個時候只是失去了和用戶交互的能力,就是說用戶和這個屏幕操作是沒用反應的,但並不是說整個activity被銷燬了,這時候它所有的成員信息和成員變量都還在,當然還有一種情況,就是處於內存緊張的時候,這個activity會被回收)

stopped狀態:這個狀態出現在當這個activity完全被另外一個activity覆蓋的時候,被覆蓋的activity就會處於stopped狀態,這個時候它不再是可見的了,但是它和剛纔的paused狀態一樣,它的一些內存狀態的信息,成員變量,都可能還在,如果這時候內存不緊張的情況下,它們都還在.

killed狀態:表明activity以及被系統回收掉了,就會處於killed狀態,這時候所存儲的信息肯定不存在了

2.activity的生命週期

首先activity啓動的時候,它會走這樣的:(第一個場景)

Activity啓動 -- >onCreate()-->onStart()-->onResume()  這三個都是什麼意思,我爲大家詳細的講解一下

onCreate()在Activity被創建的時候會調用,生命週期第一個被調用的方法,在創建Activity的時候一定要重寫改方法,在裏面可以

做一些初始化工作比如說setlayout,圖片的預加載什麼的等等

onStart()表明activity正在啓動,已經處於用戶可見狀態,當然它還沒有處於前臺顯示,就是說這個時候用戶還不能與activity進行交互和點擊,滑動等,簡單的理解一下,這時候我們已經看見了,但是沒有辦法觸摸的狀態,不可與用戶交互

onResume()表明activity已經是在前臺可見了,與用戶交互了.(注:在這裏可以初始化一些資源)

(第二個場景)點擊Home鍵回到主界面(Activity不可見)-->onPause()-->onStop()

onPause():當這個被調用的時候,表明整個activity處於停止狀態,當用戶使當前的activity退居到後臺的時候,onpause方法就會被調用

onstop():一般在onpause執行完之後被調用.表明整個activity已經停止或者被覆蓋.如果內存是緊張不夠的話,activity可能被回收掉

(第三個場景)當我們再次回到原Activity的時候-->onRestart()-->onStart()-->onResume()

onRestart()表示activity正在重新啓動,而且這個activity是由不可見狀態變爲可見狀態的時候,會調用這個方法(例如,從桌面再次回到Activity)

(第四種場景)推出當前Activity時候-->onPause()-->onStop()-->onDestroy()

onDestroy()表明當前activity正在被銷燬,可以做一些回收工作以及資源的釋放.

3.Android進程優先級

前臺/可見/服務/後臺/空

前臺進程一般就是處於和用戶交互的Activity,或者在前臺的Activity綁定的service

可見進程就是Activity處於可見,但是用戶不能點擊的狀態

服務進程就是在後臺開啓了Service服務,就叫做服務進程

後臺進程就是前臺進程被按了home鍵,這個時候就是後臺進程,不會立刻被回收,會根據內存情況進行相應的回收

空進程是優先級最低的,如果進程不屬於上面的幾種就是空進程,空進程處於緩存的目的會保留,安卓系統可以隨時殺掉它

android進程的回收順序從先到後分別是:空進程,後臺進程,服務進程,可見進程,前臺進程。

二、Android的任務棧

一個Task包含的就是activity集合,android系統可以通過任務棧有序的管理activity,一個app當中可能不止一個任務棧,在某些情況下,一個activity也可以獨享一個任務棧(singleInstance模式啓動的activity)

一個app當中可以有多個任務棧,任務棧是存放activity的,後進先出

三、activity的啓動模式

1.standard

這種模式下,每次啓動一個acivity時候,都會重新創建一個activity的實例,將它加入到任務棧當中,而且不會考慮之前是否有這個activity實例了,它只會重新創建activity,每創建一個,都會走相應的生命週期.

2.singletop(棧頂複用模式)

如果你創建了acticity,是在任務棧的棧頂,它就不會創建新的acticity,而是複用任務棧頂的activity,如果它不是棧頂,而是棧頂的第二個位置,那麼它還會繼續創建Activity,所以說爲了提高這個模式,安卓又提供了singletask

3.singletask(棧內複用模式)

單例模式,和singletop相似,singletop只是檢測棧頂元素是否有需要啓動的activity而singletask檢測的是整個任務棧當中是否存在需要啓動的activity,如果存在,就把它置於棧頂,把這個activity以上的activity都從任務棧當中移除銷燬,這時候會回調一個onNewInstance方法

4.singleinstance

這個activity如果在整個系統之中有有其且只有一個實例,而且這個activity獨享這個任務棧,這種模式就叫做singleinstance模式

四、scheme跳轉協議

scheme是一種頁面內跳轉協議,是一種非常好的實現機制,通過定義最近的scheme協議,可以非常方便跳轉app種的各個頁面;通過scheme協議,服務器可以定製化,告訴App跳轉那個頁面,可以通過通知欄消息定製化跳轉頁面,可以通過H5頁面跳轉頁面等.

應用場景:給服務端口下發一個url路徑,然後客戶端根據服務端下發的url路徑跳轉到相應的頁面;第二種是通過H5頁面跳轉頁面;第三種是APP根據url跳轉到另外一個App的指定頁面

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章