導航:首頁 > 操作系統 > android生命周期詳解

android生命周期詳解

發布時間:2022-09-24 14:45:08

android中,activity生命周期是指什麼

一個Android應用程序在運行時,對於底層的Linux Kernel而言都是一個單獨的進程,但是對於Android系統而言,因為局限於手機畫面的大小與使用的考慮,不能把每一個運行中的應用程序窗口都顯示出來。

所以通常手機系統的界面一次僅顯示一個應用程序窗口,Android使用了Activity的概念來表示界面。

運行中的應用程序分為五大類,分別是:

前景模式:foreground process

可見模式:visible process

背景模式:background process

空白模式:empty process

服務模式:service process

除了最後一個,貌似service process是Service的事情了。其他都與Activity相關。

Android系統會判斷應用程序Activity是屬於哪一個類,給予不同的Activity生命周期。

Activity的生命周期也是它所在進程的生命周期。

Activity生命周期的運行如圖:

Activity生命周期的每一個階段都表示為金字塔上的一個台階,當系統創建一個新的activity時,每一個回調函數都把activity的狀態網上挪一步。

金子塔的最頂層就是activity運行在前景模式下,用戶可與之交互。

當用戶離開activity時,系統調用另一些回調函數,將activity的狀態從金字塔中一步一步移下來。有些情況下,activity只移動一部分,並沒有完全到底,這些情況下仍然可以移動回頂部。

注意這些狀態中只有三個狀態是靜態(static)的,意味著activity只有在這三個狀態下能停留一段時間:

Resumed:foreground,用戶可交互running state

Paused:部分被遮擋,不能接收用戶輸入也不能執行代碼,另一個半透明或者小的activity正擋在前面。

Stopped:activity完全被遮擋,不能被用戶看到,activity被認為在background,當Stopped的時候,activity實例的狀態信息被保留,但是不能執行任何代碼。

其他狀態都是轉換狀態,系統會很快調用其他相應的回調函數離開這些狀態。比如系統調用onCreate()之後,會很快調用onStart(),之後是onResume()。

相信不少朋友也已經看了以上的分析之後,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。

1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。

4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後台:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。

5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。

6.當前Activity處於被覆蓋狀態或者後台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。

7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。

有關於Activity的生命周期是Android中最基礎和最重要的知識,如果你想系統的了解一下Activity的生命周期,推薦你可以去一個叫做秒秒學的教程網站上看看。

Ⅱ android為什麼要劃分生命周期

沒有為什麼,你只需要了解它是什麼就可以了。

劃分生命周期是一種軟體系統設計概念。手機不同於電腦,電腦擁有足夠的資源來處理各種業務,同時支持多任務,而手機則不同,它一般是單任務,沒有多少資源處理太多業務,大家必須排隊來處理,另外還有各種不可預期的請求(比如我正在玩QQ游戲,電話來了)。你應該先了解生命周期中的每個狀態位都是在什麼時候出現的,就應該能明白為什麼需要這樣設計。

這個生命周期的介紹在 Android 官方網站 developer.android.com 上有介紹

Ⅲ android activity什麼周期可見

Android中Activity的生命周期可以分為四類:

  1. foreground process(前景模式)

  2. visible process(可見模式)

  3. background process(背景模式)

  4. empty process(空白模式)

參考官方給出的生命周期圖可以知道Activity的生命周期分為7個方法

onCreate()、onStart() 、onResume()、 onPause()、onStop()、onDestory() 、onRestart()


其中前景模式是由onCreate(創建)、onStart(啟動) 、onResume(可見可交互)三個方法來體現的。而可見模式則分為兩種狀態,一種是被Dialog覆蓋,進入透明模式,在onPause(暫停)可以體現出來,第二就是如果當前Activity被完全覆蓋,就會進入onStop狀態,完全不可見,當覆蓋物消失時會調用onRestart方法來喚醒該Activity,由覆蓋狀態重新變為可見狀態,並重新執行onstart()和onResume()重新變為可見可交互狀態。


如果Activity被完全覆蓋的話,也就是所謂的第三種狀態,背景模式。此時的Activity有兩種處理方案可以使用,第一方案是調用onDestory()方法完全銷毀當前的Activity。第二方案就是清除掉當前的Activity,並重新執行onstart()和onResume()重新變為可見可交互狀態。


如果Activity被完全覆蓋,並且系統需要內存時,就會暫時銷毀Activity,進入空白模式,空白模式最重要的目的就是暫時釋放出內存,直到使用者再度喚醒空白模式的 Activity時,才會將空白模式變成前景模式。


最後附張官方給出的生命周期圖來幫助理解:

Ⅳ Android 下拉通知欄時Activity的生命周期——重新理解onPause()

在某個APP中,發現下拉通知欄的時候,正在播放的視頻會暫停,於是有點好奇這段操作是不是在生命周期中實現的。在網上眾多關於Activity生命周期的討論中,很多人認為 onPause() 和 onStop() 的區別就是「部分遮擋」和「全部遮擋」,那按照這個猜測來分析一下這個過程:

首先,通知欄下拉一點點,符合一般描述中「Activity被部分遮擋」—— onPause()
然後,通知欄完全落下之後,「Activity被全部遮擋」—— onStop()

於是自己寫了一個實例來驗證:

啟動APP時,毫無疑問,調用了 onCreate() → onStart() → onResume() ;
完全下拉通知欄,然後上拉通知欄,發現沒有日誌列印,說明 下拉通知欄對Activity的生命周期沒有影響

經過測試不難發現,在Activity中彈出AlertDialog、Toast時,Activity的 onPause() 並沒有調用;筆者還嘗試在MIUI系統中喚醒小愛同學,發現 onPause() 仍然沒有被調用。
但是在以下特殊的情況下, onPause() 會被調用:

跑去看文檔發現了如下信息:

發現了 onPause() 和Activity的奇妙聯系,就不難理解之前為什麼沒有被調用的問題了。

查看AlertDialog和Toast的源碼,可以發現它們顯示的原理,都是通過 WindowManager.addView() 來顯示的。也就是說,AlertDialog和Toast可以看做是當前Activity的一部分View,當然也不會對Activity的生命周期構成影響。

因此, onPause() 是否調用的關鍵就是,是否有另一個Activity參與進來了。
而網上流傳甚廣的 onPause() 和 onStop() 調用中提到的「遮擋」,應該修正為 「被Activity遮擋」

至於官方文檔中提到的, onPause() 之後會調用 onStop() 或者 onResume() ,前者很好理解,一般的退出、新啟動一個全屏Activity、鎖屏、返回HOME等操作都是這種情況;至於後者,筆者能想到的情況就是,彈出部分遮擋的Activity類型的對話框,然後按返回鍵。

Ⅳ Android View類中的生命周期是怎樣的

android view有以下14個周期:
1、onFinishInflate() 當View中所有的子控制項均被映射成xml後觸發 。
2、onMeasure( int , int ) 確定所有子元素的大小 。
3、onLayout( boolean , int , int , int , int ) 當View分配所有的子元素的大小和位置時觸發 。
4、onSizeChanged( int , int , int , int ) 當view的大小發生變化時觸發 。
5、onDraw(Canvas) view渲染內容的細節。
6、onKeyDown( int , KeyEvent) 有按鍵按下後觸發 。
7、onKeyUp( int , KeyEvent) 有按鍵按下後彈起時觸發 。
8、onTrackballEvent(MotionEvent) 軌跡球事件 。
9、onTouchEvent(MotionEvent) 觸屏事件 。
10、onFocusChanged( boolean , int , Rect) 當View獲取或失去焦點時觸發 。
11、onWindowFocusChanged( boolean ) 當窗口包含的view獲取或失去焦點時觸發 。
12、onAttachedToWindow() 當view被附著到一個窗口時觸發 。
13、onDetachedFromWindow() 當view離開附著的窗口時觸發,Android123提示該方法和 onAttachedToWindow() 是相反的。
14、onWindowVisibilityChanged( int ) 當窗口中包含的可見的view發生變化時觸發。

Ⅵ 如何管理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的生命周期的問題

Android 應用程序的生命周期是由Android 框架進行管理,而不是由應用程序直接控

制.

android應用一般由四大組件組成

四大組件中的三個都有各自的生命周期:

activity:

活動(Active/Running)狀態

暫停(Paused)狀態

停止(Stopped)狀態

非活動(Dead)狀態

content-provider:

沒有生命周期,一般只提供url供其他應用操作,

boardcast-receiver:

生命周期只有十秒左右,如果在 onReceive() 內做超過十秒內的事情,就會報ANR(Application No Response) 程序無響應的錯誤信息

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

一、基礎

1.1自己創建的activity必須要繼承類Activity(或其子類)。在activity里,為了實現activity各種狀態的切換,你必須實現指定的回調方法。以下是最為重要的兩個回調方法

onCreate():

這是必須實現的回調方法,啟動一個 activity時會首先調用此方法。因此,在onCreate()的方法體里,你應該初始化該activity必要的控制項。值得注意的是,在這里你必須調用setContentView(View view)方法去呈現用戶的界面。

onPause():

在用戶將要離開activity時調用此方法(指的是此時activity處於半透明狀態且沒有獲取用戶的焦點)。通常在這樣的狀態下,你需要處理用戶數據的提交、動畫處理等操作。

1.2銷毀activity

你可以調用finish()方法去銷毀一個activity。同樣得,你可以調用finishActivity()方法去銷毀一個你剛剛啟動的activity。

tips:

在多數情況下,你是不需要顯式地調用finish…()方法去銷毀一個activity。在將要討論到的activity生命周期里,你可以知道,Android系統會為你管理activity的生命周期,所以你並不需要顯式銷毀activity(即調用finish類方法)。顯式地調用finish類方法,會對用戶的體驗產生不利的影響,除非你確實是不希望用戶返回到此activity(界面),才去顯式調用finish類方法。

二、認識activity的生命周期

2、1

Activity的生命周期對它的任務、backstack和與此有關聯的activity有著直接的影響。因此想開發出一個健壯的有彈性的Android程序,你需要學會如何去管理activity的生命周期(即調用各種回調方法)。

activity的生命周期主要包含一些三種狀態:

(1)運行態(Resumedstate)

此時Activity程序顯示在屏幕前台,並且具有焦點,可以與用戶的操作進行交互,如向用戶提供信息、捕獲用戶單擊按鈕的事件並做處理。

(2)暫停態(PausedState)

此時Activity程序失去了焦點,並被其他處於運行態的otherActivity取代在屏幕顯示,但otherActivity程序並沒有覆蓋整個屏幕或者具有半透明的效果—此狀態即為暫停態。處於暫停態的Activity仍然對用戶可見,並且是完全存活的(此時Activity對象存留在內存里,保留著所有狀態與成員信息並保持與窗口管理器的連接)。如果系統處於內存不足的情況下,會殺死這個Activity。

(3)停止態(StoppedState)

當Activity完全被另一個otherActivity覆蓋時(此時otherActivity顯示在屏幕前台),則處於停止態。處於停滯態的Activity依然是存活的(此時Activity對象依然存留在內存里,保留著所有的狀態和與成員信息,但沒有與窗口管理器保持連接),而且它對用戶是不可見的,如果其他地方需要內存,系統會銷毀這個Activity。

處於暫停態(PausedState)或者停止態(Stopped
State)的Activity,系統可以通過調用finish()方法或者直接終止它的進程來銷毀此Activity(從內存中清楚此Activity對象)。被finish()或者銷毀的Activity再重新打開時,是需要再次初始化此Activity的。

2、2

當一個Activity從一種狀態轉到另一種狀態時,會通過調用回調方法來通知這種變化。這些回調方法都是可以重寫的,你可以根據程序的的需要來選擇重寫對應的回調方法。以下列出了Activity生命周期里的基本回調方法:

public class ExampleActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// The activity is being created.

}

@Override

protected void onStart() {

super.onStart();

// The activity is about to become visible.

}

@Override

protected void onResume() {

super.onResume();

// The activity has become visible (it is now
"resumed").

}

@Override

protected void onPause() {

super.onPause();

// Another activity is taking focus (this activity is
about to be "paused").

}

@Override

protected void onStop() {

super.onStop();

// The activity is no longer visible (it is now
"stopped")

}

@Override

protected void onDestroy() {

super.onDestroy();

// The activity is about to be destroyed.

}

}

筆記:在方法體里,必須先調用父類對應的實現方法super.Xxx(),再執行其他的操作(如上面代碼所示)。為了習慣,下面也提供一些代碼來測試一些這些方法的使用,在博客的最後面。

總的來說,這些回調方法定義了Activity整個生命周期。在生命周期里通過重寫這些回調方法,,你可以監控以下下三個嵌套的方法循環。

完整存活的時間:

Activity的完整存活的時間是自第一次調用onCreate()開始,直至調用onDestroy()為止。Activity在onCreate()中設置所有「全局」狀態以完成初始化,而在onDestroy()中釋放所有系統資源。例如,如果Activity有一個線程在後台運行從網路下載數據,它會在onCreate()創建線程,而在 onDestroy()銷毀線程。

可見狀態的時間:

Activity的可見狀態是自onStart()調用開始直到相應的onStop()調用結束。在此期間,用戶可以在屏幕上看到Activity,盡管它也許並不是位於前台或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中注冊一個BroadcastReceiver來監控會影響UI的變化,而在onStop()中來注消。onStart() 和 onStop() 方法可以隨著應用程序是否為用戶可見而被多次調用。

顯示在前台的時間:

Activity的前台顯示是自onResume()調用起,至相應的onPause()調用為止。在此期間,Activity位於前台最上面並與用戶進行交互。Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的Activity啟動時,將調用onPause() 方法。當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。

閱讀全文

與android生命周期詳解相關的資料

熱點內容
華為筆記本電腦怎麼安裝抖音app 瀏覽:408
阿里雲國際版試用的伺服器怎麼搞 瀏覽:893
java正則表達式工具 瀏覽:158
oa伺服器怎麼設置ftp 瀏覽:8
安卓如何安裝obb 瀏覽:440
QQ聊天記錄journal文件夾 瀏覽:118
蘋果公司雲伺服器地址 瀏覽:85
加密記事本手機 瀏覽:437
汽車壓縮機變頻閥 瀏覽:95
域外伺服器是什麼意思 瀏覽:639
大眾點評伺服器怎麼老卡頓 瀏覽:556
javavector與list的區別 瀏覽:316
java初始化類數組 瀏覽:303
java字元串轉換成json對象 瀏覽:647
android非阻塞socket 瀏覽:358
編譯系統概念 瀏覽:452
天眼通app能做什麼 瀏覽:557
魅族手機怎麼加密圖庫 瀏覽:8
rpa編譯器 瀏覽:572
車載雲伺服器記錄 瀏覽:740