導航:首頁 > 操作系統 > android生命周期方法

android生命周期方法

發布時間:2022-10-24 01:10:27

android中Service的生命周期與啟動方法有什麼區別

●    startService():開啟Service,調用者退出後Service仍然存在。

●    bindService():開啟Service,調用者退出後Service也隨即退出。

Service生命周期:

●    只是用startService()啟動服務:onCreate() -> onStartCommand() -> onDestory

●    只是用bindService()綁定服務:onCreate() -> onBind() -> onUnBind() -> onDestory

●    同時使用startService()啟動服務與bindService()綁定服務:onCreate() -> onStartCommand() -> onBind() -> onUnBind() -> onDestory

❷ 如何理解Android中Activity的三個「生命周期」

下圖是官方文檔里的Activity生命周期圖,其中彩色標出的四個框是Activity的四種狀態,當Activity的狀態改變時會觸發一個或多個onXXX()方法。


onCreate()

當Acitivity第一次被創建時觸發,一般在這里要做的事情包括創建視圖(setContentView())、向視圖填充必要的數據等等。

onRestart()

這個我比較少用到,按文檔上的介紹,如果Activity之前被stop過,那麼下一次onStart()方法之前會先觸發這個方法。

onStart()

只要Activity從不可見變成可見,就會觸發到這個方法,但被AlertDialog遮擋/顯示的情況不算在內。

onResume()

當Activity來到最上層的時候,也就是開始與用戶直接交互時,觸發這個方法。例如本來Activity被一個AlertDialog遮擋,當這個AlertDialog消失時,onResume()方法就被觸發。

onPause()

和onResume()的觸發條件剛好相反,如果Activity本來在最上層,當它要讓出最上層的位置時會觸發這個方法。onPause()和onResume()是被觸發最頻繁的兩個方法,所以在這里不應該執行過於消耗資源的方法。

onStop()

當有其他Activity覆蓋了當前Activity時,不論另一個Activity是新開始的還是從下層移至最上層的,當前Activity的onStop()方法都會被觸發。

onDestroy()

Activity生命周期的終點。有兩種情況會導致它被觸發:1)執行了Activity#finish()方法;2)Android系統由於資源不足等原因決定殺掉Activity所在進程。通過isFinishing()方法可以判斷出是哪種情況。在這個方法里,我們一般要做的事情是釋放Activity佔有的資源,例如後台正在進行的下載線程等等。

最後,舉個實際例子來說明,假設你有一個「首頁Activity」和一個「編輯頁Activity」。

•當用戶點擊首頁里的「開始編輯」按鈕時,首頁的onPause()->onStart()onStop()依次觸發,編輯頁的onCreate()->onStart()->onResume()依次觸發;(感謝James.H.Fu指出的錯誤)

•當用戶在編輯頁按下「返回」按鈕時,編輯頁的onPause()->onStop()依次觸發,之後首頁的onStart() -> onResume()依次觸發;

•這時用戶在首頁按下「返回」按鈕,首頁的onPause()->onStop()->onDestroy()依次觸發。

❸ android的生命周期

單個Actiivty正常的生命周期

onCreate -> onStart -> onResume -> onPause -> onStop -> onDestory

這就是一個Activity從被創建到被銷毀過程。

其中正常運行狀態為onResume

當Activity從前台被置於後台,
onResume -> onPause -> onStop

當從後台重新置於前台
onStop -> onPause -> onResatrt -> onStart-> onResume

其中可以發現,只要Activity置於前台都會執行onStart函數,所以我們可以考慮在這里做一下需要在前台就處理的邏輯

各個生命周期函數:
onCreate: Activity被創建,此時Activity處於不可見、不可交互
onStart: 此時Activity 部分可見不可交互
onRestart: Activity從後台重新回到前台,部分可見不可交互
onResume: 完全可見可交互,為Activity正常運行狀態
onPause: Activity處於暫停,從前台被置於後台 部分可見部分不可見,不可交互
onStop: 完全置於後台,完全不可見,
onDestroy: Activity被銷毀

上面就是一個正常的Activity的生命周期,

在Activity生命周期中,還設計一些其他:
Activity旋轉:
onCreate -> onStart -> onResume
此時被旋轉
-> onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

可以發現當Activity被旋轉時,整個Activity是被銷毀然後重新創建的。其中新增調用了兩個生命周期函數
onSaveInstanceState: 當Activity被系統異常銷毀時被調用,用於存儲數據,用於系統恢復Activity時恢復數據
onRestoreInstanceState: 當Actiivty被系統異常銷毀並重新創建時,取出在onSaveInstanceState時存儲的數據

注意,在onCreate函數中,其實也是有參數的

此處的savedInstanceState也是在onSaveInstanceState時存儲的數據,但此處可能為nll,
因為在正常的Activity時,此處就是null,只有在Activity被異常銷毀然後被系統重新創建時,此處才有值。
如果要在此處使用,切記要判空。

onNewIntent與Activity的啟動模式有關

當Activity未設置啟動模式時,則不會觸發該生命周期函數

當Activity已經處於應用的Activity棧中

onNewIntent只會在Activity設置了啟動模式,並且Activity被復用時才會調起。

注意:只對startActivityForResult調起的Activity起作用,statActivity本質調用的也是startActivityForResult,Activity正常的切換前後台時不會觸發的。

A -> B:
A正常運行處於 onResume,打開B

A onPause -> B onCreate -> B onStart -> B onResume -> A onStop
點擊跳入B頁面, 首先A進入暫停,B開始創建,到onResume完全可見可交互,於是A被完全遮擋,變成完全不可見、處於後台,進入onStop

A -> B ->goBack-> A

在B頁再執行返回

B onPause -> A onRestart -> A onStart -> A onResume -> B Stop -> B onDestory
和A進入B類似,B返回A時,B進入暫停,A變得重新可見到A完全可見,進入onResume,然後B進入停止,並銷毀

B啟動模式設置為 SingleTop,B -> B
B onPause -> B onNewIntent -> B onResume
因為 B已經處於棧頂,啟動模式為 SingleTop 則不會重新創建B的實例

將A的啟動模式設置為SingleTask

可以通過在andorid studio的終端 Terminal中輸入:adb shell mpsys activity
查看當前應用的Activity task棧

❹ 請簡述Android的Activity組件的生命周期方法。

在Activity的生命周期中有很多的回調方法,系統調用Activity中的這些回調方法,就像是爬一個階梯。而這些回調方法就相當於階梯的每一層。當系統創建了一個新的Activity實例,回調方法一層一層的從最低層爬到最高層,也就是Resumed()。到位於頂樓的時候,也就是這個Activity就位於用戶的前台。此時用戶就可以和Activity進行互動了。

當用戶要離開Activity的時候,系統調用右邊的回調方法,一層一層的下這個階梯,使Activity的狀態從最高層移動到最底層。在有些情況下,Activity只是完成部分的狀態遷移並且等待用戶的指令。此時Activity只是站在Paused()上或者是Stopped()的階梯上面,當得到用戶重新運行的指令時,Activity會回到左邊的階梯上。重新調用左邊相應的爬階梯回調方法,一步一步向上爬並重新回到最高層的狀態。並顯示在用戶的前台。

根據Activity復雜度的不同,你或許不用實現所有的生命周期方法。可是,理解每個生命周期回調函數的意義卻非常重要,這能確保你的應用能完全按照用戶的期望做出正確的動作。正確的實現生命周期的回調方法,才能應用正確的動作。所以作為一個合格的android程序員,理解Activity的生命周期,是非常有必要的

❺ androidx.lifecycle 生命周期感知型組件實現原理

androidx.lifecycle 組件用來感知另一個組件如 Activity 和 Fragment 的生命周期變化,方便在生命周期變更時處理一些事情。

其邏輯簡單來說就是:使用者向 LifecycleRegistry 注冊一個 LifecycleObserver ,當 LifecycleOwner(一般由 Activity 和 Fragment 實現)發生生命周期變更時,將其變更的 STATE 通知給 LifecycleRegistry ,然後 LifecycleRegistry 將其變更的 EVENT 告知 LifecycleEventObserver ,LifecycleEventObserver 通過 Lifecycling 轉換成用戶注冊的 LifecycleObserver 類型並回調。

可以看到這裡面最有趣的就是 LifecycleObserver 的實現方式,這是本篇重點描述的內容。

整個 lifecylce 組件最有趣的實現應該就是這個 LifecycleObserver ,它是一個空介面。所有實現它的類最後會通過 Lifecycling 轉換成它的一個已知實現類 LifecycleEventObserver 。

這個框架實現的核心。它定義了一個回調函數 onStateChanged(owner, event) 。

我們先回到 Lifecycle 及其實現類 LifecycleRegistry 。

Lifecycle 定義了 Lifecycle 的 STATE 和 EVENT 。

狀態和 EVENT 和 Activity 及 Fragment 對應。初始狀態為 INITIALIZED 和 DESTROYED ,定義從初始狀態到 CREATED 再到 STARTED 再到 RESUMED 為狀態上升,相反為狀態下降。

Lifecycle 存儲了 Activity 、Fragment 的生命周期狀態,並方便其它對象跟蹤。LifecycleRegistry 是其實現類,它允許多個對象同時跟蹤生命周期狀態(通過 LifecycleObserver)。

上面說到可以向 LifecycleRegistry 注冊任意實現的 LifecycleObserver ,然後 LifecycleRegistry 會通過 Lifecycling 轉換成 LifecycleEventObserver 去監聽,說到變更時再轉換回自定義 LifecycleObserver 中的回調方法。那麼是怎麼實現的呢?

這個框架中定義了兩個實現方式,一種通過自定義的 adater ,另外一種為反射。

通過 adapter 的方法其實原理很簡單,就是自定義 LifecycleObserver 時同時自定義一個 adapter ,這個 adapter 需要自己實現將 LifecycleEventObserver 中回調的狀態轉換成 observer 中回調的方法。

這個 adapter 需要在 LifecycleObserver 同級的 pkg 下面且名為 LifecycleAdapter ,其父類或其本身繼承自 GeneratedAdapter ,並有構造函數 LifecycleAdapter(LifecyelObserver)。

Lifecycling 在轉換時將為這種類型的 observer 創建一個 或 ,並傳入自定義的 GeneratedAdapter 實現類。因為這個 XXXGeneratedAdapterObserver 實現了 LifecycleEventObserver ,所以在其收到 onStateChange 回調時只需調用 GeneratedAdapter #callMethods ,剩下交給 adapter 自己去實現狀態與回調的轉換。

如果不想自定義 GeneratedAdapter 的實現類可以嗎,可以。這個框架還實現了反射回調機制。只要你在自定義 LifecycleObserver 時給回調函數加上 @OnLifecycleEvent(Lifecycle.Event xxx) 的注釋,Lifecycling 會幫你創建一個 並傳入 observer 對象,這個 實現 LifecycleEventObserver ,並通過反射機製取出並緩存所有按規則加上了 @OnLifecycleEvent 注釋的方法,在收到 onStateChange 時取出對應 event 的反射方法,並回調。

可以看到其核心實現在 CallbackInfo ,其緩存了 observer 對象中的 [event, 反射方法 list] map ,在收到 lifecycle 變更時,取出對應 event 的所有反射方法 list 並回調就行。

Lifecycling 可以說是整個實現的精髓了,它在 LifecycleObserver 注冊時將其轉換成 LifecycleEventObserver 的 adapter 或 reflect 實現類。

一般來說,我們使用 LifecycleEventObserver 就行,雖然這個框架通過復雜的實現可以讓你隨意(其實還是有條件)的定義自己要的 LifecycleObserver ,但似乎也不是很有實際用途?

android developers:使用生命周期感知型組件處理生命周期

❻ Android Activity生命周期都該做哪些事情

activity主要生命周期的方法說明: onCreate(Bundle savedInstanceState):創建activity時調用。設置在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問!
onStart():activity變為在屏幕上對用戶可見時調用。
onResume():activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。 onPause():activity被暫停或收回cpu和其他資源時調用,該方法用於保存活動狀態的,也是保護現場,壓棧吧!
onStop():activity被停止並轉為不可見階段及後續的生命周期事件時調用。
onRestart():重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。 OnDestroy():activity被完全從系統內存中移除時調用,該方法被 2.橫豎屏切換時候activity的生命周期
1、新建一個Activity,並把各個生命周期列印出來
2、運行Activity,得到如下信息
onCreate-->onStart-->onResume-->
3、按crtl+f12切換成橫屏時
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
4、再按crtl+f12切換成豎屏時,發現列印了兩次相同的log
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
5、修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",執行步驟3
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->
6、再執行步驟4,發現不會再列印相同信息,但多列印了一行onConfigChanged
onSaveInstanceState-->onPause-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume-->onConfigurationChanged-->
7、把步驟5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",執行步驟3,就只列印onConfigChanged
onConfigurationChanged-->
8、執行步驟4
onConfigurationChanged-->onConfigurationChanged-->
總結:
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法

總結一下整個Activity的生命周期
補充一點,當前Activity產生事件彈出Toast和AlertDialog的時候Activity的生命周期不會有改變
Activity運行時按下HOME鍵(跟被完全覆蓋是一樣的):onSaveInstanceState --> onPause --> onStop onRestart -->onStart--->onResume
Activity未被完全覆蓋只是失去焦點:onPause--->onResume

❼ IT培訓分享Android軟體開發主要是學習什麼的

近半年來,手機的安卓系統與ios系統是目前主流的手機系統,Android軟體開發主要是學習什麼的?IT培訓http://www.kmbdqn.com/發現安卓開發的技術很多的,如果想一次性學好是不實際的,但下面這些基礎還是要學好的。



1、Activity生命周期


雖然Android中有四大組件,但是不可否認Activity是最常用的。所以熟練掌握Android的生命周期是必須的。其實生命周期就是記住 Activity的那些方法在什麼時候被系統調用,這樣才可以把對應的邏輯代碼寫到合適的方法內部去。


至於服務和廣播組件可以稍微緩一下,到實際使用的時候再學習都可以。

2、界面開發技術


界面開發是一種基本的技術,幾乎所有的程序裡面都需要用到。在Android開發中界面開發分為3種:


1)使用xml文件布局


使用xml首先對於界面進行布局,然後在Activity裡面進行引用是最常見的應用軟體開發技術,這種方式使用的最大,需要學習的內容也最多。學習時需要熟悉:


a)五種Layout布局


深刻理解五種布局組織控制項的方式是一個基本的基礎,這樣你才可以在實際的界面中靈活的使用每種布局結構,構造出需要的界面。


b)常用控制項


控制項有很多,至少要知道每種控制項是做什麼的,至於裡面的特定參數和方法可以學要的時候再去查


c)界面美化


系統的控制項很多時候無法滿足要求,需要通過添加背景更換圖片等進行美化,要熟悉每種控制項如何去美化。


掌握了上面的內容,通過布局的嵌套就可以製作出各種界面,如果在熟悉include的使用就可以減少xml的重復,方便後期的修改和維護了。


2)使用代碼動態創建


有些時候需要動態的創建一些布局和控制項,這個就需要使用LayoutInflater去創建一些動態的界面了。


3)自己繪制界面


游戲中常用,繼承SurfaceView自己繪制。


3、數據存儲技術


Android中的數據存儲方式有3種:


1)SharedPrefereneces存儲


對於簡單的數據可以使用該方式存儲,以鍵值對的方式存儲一些基本的數據。


2)文件存儲


將數據以文件的形式存儲,可以是手機自身的存儲也可以是SD卡,文件的數據格式自己定義。


3)SQLite資料庫存儲


使用標准SQL語句進行操作,復雜數據的首選。

4、網路編程


現在的Android程序不需要聯網的已經不多了。所以網路編程也是必須的,一般的公司都會封裝有自己的聯網結構,但是基本的聯網還是要熟悉。


1)HTTP聯網


使用Http聯網+Json數據格式是現在很多客戶端的首選。


2)Socket聯網


至於藍牙等連接方式則可以在項目需要的時候學習。


對於手機的系統功能,如撥打電話、發送簡訊、讀取系統參數等則可以根據需要在學習,不麻煩的。


其次,手機軟體相關


Android開發不同於普通的電腦軟體開發,需要了解手機的操作習慣,知道手機的屏幕不大、內存有限,電池有限等,在實際開發和設計時盡量考慮。


❽ 如何管理Android中Activity的生命周期

在創建一個Activity中會經歷:
6個方法:onCreate(),onStart(),OnResume(),onPause(),OnStop(),OnDestoty();
Activity在ADTandroid虛擬機中是以棧的形式存放的。
上面的6個方法分別是:創建,開始,繼續,暫停,停止,銷毀。
一共這6個生命周期的方法。

❾ 如何管理Android中Activity的生命周期

管理Android中Activity的生命周期

在一個activity的生命周期中,系統會像金字塔模型一樣去調用一系列的生命周期回調函數。Activity生命周期的每一個階段就像金字塔中的台階。當系統創建了一個新的activity實例,每一個回調函數會向上一階移動activity狀態。處在金字塔頂端意味著當前activity處在前台並處於用戶可與其進行交互的狀態。

當用戶退出這個activity時,為了回收該activity,系統會調用其它方法來向下一階移動activity狀態。在某些情況下,activity會隱藏在金字塔下等待(例如當用戶切換到其他app),此時activity可以重新回到頂端(如果用戶回到這個activity)並恢復用戶離開時的狀態。

根據activity的復雜度,也許不需要實現所有的生命周期方法。但了解每一個方法的回調時機並在其中填充相應功能,使得確保app能夠像用戶期望的那樣執行是很有必要的。如何實現一個符合用戶期待的app,我們需要注意下面幾點:

使用app的時候,不會因為有來電通話或者切換到其他app而導致程序crash。

只有三個狀態是靜態的,這三個狀態下activity可以存在一段比較長的時間。(其它幾個狀態會很快就切換掉,停留的時間比較短暫)

Resumed:該狀態下,activity處在前台,用戶可以與它進行交互。(通常也被理解為"running" 狀態)

Paused:該狀態下,activity的部分被另外一個activity所遮蓋:另外的activity來到前台,但是半透明的,不會覆蓋整個屏幕。被暫停的activity不再接受用戶的輸入且不再執行任何代碼。

Stopped:該狀態下, activity完全被隱藏,對用戶不可見。可以認為是在後台。當stopped, activity實例與它的所有狀態信息(如成員變數等)都會被保留,但activity不能執行任何代碼。

❿ Android Activity生命周期都該做哪些事情

1.Android用Activity Stack來管理多個Activity,所以呢,同一時刻只會有最頂上的那個Activity是處於active或者running狀態。其它的Activity都被壓在下面了。 2. 如果非活動的Activity仍是可見的(即如果上面壓著的是一個非全屏的Activity或透明的Activity),它是處於paused狀態的。在系統內存不足的情況下,paused狀態的Activity是有可被系統殺掉的。只是不明白,如果它被幹掉了,界面上的顯示又會變成什麼模樣?看來下回有必要研究一下這種情況了。 3.幾個事件的配對可以比較清楚地理解它們的關系。Create與Destroy配成一對,叫entrie lifetime,在創建時分配資源,則在銷毀時釋放資源;往上一點還有Start與Stop一對,叫visible lifetime,表達的是可見與非可見這么一個過程;最頂上的就是Resume和Pause這一對了,叫foreground lifetime,表達的了是否處於激活狀態的過程。 4.因此,我們實現的Activity派生類,要重載兩個重要的方法:onCreate()進行初始化操作,onPause()保存當前操作的結果。

閱讀全文

與android生命周期方法相關的資料

熱點內容
伺服器未響應怎麼解決手機 瀏覽:184
程序員回到古代 瀏覽:402
軟體合並一個文件夾 瀏覽:657
設置Android程序圖標 瀏覽:365
app哪個局 瀏覽:904
源碼編輯器中怎麼保存 瀏覽:463
python背景圖片代碼 瀏覽:448
3D卡片下載哪個App 瀏覽:532
如何用伺服器登錄微信 瀏覽:841
html5移動開發pdf下載 瀏覽:525
如何查看png圖片是否加密 瀏覽:821
php遞歸例子 瀏覽:190
伺服器參數配置未響應是什麼意思 瀏覽:603
pythonchardet模塊 瀏覽:751
添加gm命令 瀏覽:662
rsa加密碼亂碼 瀏覽:758
網站伺服器需要租什麼 瀏覽:999
c語言常用排序演算法 瀏覽:824
pythonhtml文件上傳 瀏覽:525
dosat命令執行exe 瀏覽:95