日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 四大组件之Activity

發布時間:2023/12/20 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 四大组件之Activity 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 四大組件之Activity

? Android有四大組件分別是:活動(activity),用于表現功能;服務(service),后臺運行服務,不提供界面呈現;廣播接受者(Broadcast Receive),勇于接收廣播;內容提供者(Content Provider),支持多個應用中存儲和讀取數據,相當于數據庫。

活動(Activity)

? 介紹:Activity是Android的四大組件之一,是用戶操作可視化界面;它為用戶提供了一個操作的頁面。在我創建一個新的Activity之后,需要調用setContenView()方法來顯示頁面,以此來為用戶提供交互。在Android APP中只要能看到的頁面都是依附于Activity顯示的,同樣Activity是在開發中使用最多最頻繁的一種組件。

1、 Activity生命周期

? 在一個Activity從頁面開始到顯示再到結束一共有7個生命周期方法

  • onCreate()

    create表示創建,生命周期的第一個方法,也是在Android開發中接觸最多的生命周期方法,表示Activity正在創建。一般會在這個方法中做一些初始化工作比如:setContentView加載布局,對一些控件和變量進行初始化等。此時Activity還在后臺,不可見。

  • onStart()

    start標識Activity正在啟動,這時Activity還沒有顯示在前臺頁面上,無法與Activity交互。其實將Activity的初始化工作放在這也沒有什么問題,放在onCreate中是由于官方推薦的以及我們開發的習慣。

  • onResume()

    resume表示繼續、重新開始,這名字和它的職責也相同。此時Activity經過前兩個階段的初始化已經蓄勢待發。Activity在這個階段已經出現在前臺并且可見了。這個階段可以打開獨占設備

  • onPause()

    pause標識頁面暫停,當Activity頁面跳轉到另一個Activity頁面時或者應用正常退出時都會執行這個方法。此時Activity還處于前臺可見狀態,因此可以在此方法做一些輕量級的數據存儲工作但是不能太耗時。因為在跳轉Activity時只有當前Activity執行了onPause方法后另一個新的Activity方法才能啟動,而且在Android中指定了onPause在500ms內沒用完全執行完畢的話會強制關閉Activity。

  • onStop()

    stop標識停止,此時Activity已經處于不可見的狀態,但是Activity還在內存中沒有被完全的關閉銷毀。這里主要做一些資源回收的工作。

  • onDestroy()

    destroy表示銷毀,這個階段說明頁面已經完全被銷毀了,不可見,我們可以將一些沒有沒有被釋放的資源進行釋放,以及進行一些回收工作

  • onRestart()

    restart表示重新開始,Activity這里是可見的,當Activity_A頁面轉到Activity_B頁面,又從Activity_B頁面返回到Activity_A頁面或者當用戶直接按Home鍵返回到桌面上后又切換到Activity頁面就會觸發這個方法。這里一般不進行操作

當Activity_A頁面切換到Activity_B頁面的執行順序是:

? [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sq2euACh-1644817774816)(/Users/caokun/Library/Application Support/typora-user-images/image-20220210095135989.png)]

其實Activity的生命周期除了onRestart方法其余六個是兩兩對應的,那么相鄰的方法有什么區別呢?

1.1、onCreate和onStart之間有什么區別?

? 1、可見與不可見的區別,onCreate是正在創建為不可見,onStart處于正在啟動狀態處于可見的狀態

? 2、執行次數的區別,onCreate方法只有在Activity創建的時候執行一次,而onStart方法在重新進入或者切換到Activity頁面的過程中都會被多次調用,因為Bndle數據恢復在onStart中進行比在onCreate進行要更加合適

? 3、onCreate能做的事其實onStart都能做,但是onStart能做的事onCreate未必都能做到;比如setContentView和資源初始化在兩者都能做。但是初始化動畫onCreate就不能做,因為onCreate是處于不可見狀態所以不會顯示效果,所以在onStart做初始化動畫比較合適。

1.2、onStart和onResume之間有什么區別?

? 1、兩者因為都處于可見狀態,但是不是都處于前臺可操作的狀態,比如:onStart是處于可見狀態但是不在前臺,不能進行交互,而onResume處于前臺可見狀態,因此可以行數據交互。

? 2、職責不同,onStart方法還是主要進行一些初始化的工作,而onResume方法,根據官方的建議可以做一些開啟動畫和可與用戶交互的工作

1.3、onPause和onStop之間有什么區別?

? 1、可見與不可見的區別;onPause是暫停狀態但是還是可見的狀態,而onStop處于已經停止了也不可見的狀態但是Activity還在內存中。

? 2、在系統存在內存不足時可能不會執行onStop方法,因為在做數據存儲、狀態保存以及程序狀態保存時最好在onPause中進行,但是不要太耗時。

1.4、onStop和onDestroy之間有什么區別

? 1、onStop處于停止狀態但是Activity還處于內存中,可以通過切換頁面來喚醒Activity頁面;但是onDestroy已經表示Activity已經被銷毀了。

1.5、為什么切換Activity時各方法的執行次序是

(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop

? 而不是

(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume

? 1、因為Activity或多或少都會占用一些內存在官方的建議,onPause方法將會釋放掉很多系統資源,為切換Activity提供流暢性的保障,而不需要再等多兩個階段,這樣做切換更快。

2、 Activity啟動方式

? Activity有四種啟動方式分別為:默認啟動模式standard、棧頂復用模式singleTop、棧內復用模式singleTask、全局唯一模式singleInstance四種模式,這四種也有不同的特征和區別,下面就一一介紹。

一個android應用程序功能通常會被拆分為多個Activity,而各個Activity之間通過Intent進行連接,android系統通過棧結構來保存整個程序的Activity,棧底的元素是整個棧任務的發起者。
正常情況下,當一個Activity啟動了另一個Activity的時候,新啟動的Activity就會置于任務棧的頂端,而啟動它的Activity雖然功成身退,但依然保留在任務棧中,處于停止狀態(如果沒有finish),當用戶按下返回鍵或者調用finish()方法時,系統會移除頂部的Activity,讓后面的Activity恢復活動狀態。但是,可以給Activity設置一些“特權”,來打破這種“和諧”的模式。這種特權,就是通過在AndroidManifest.xml文件中的屬性android:launchMode來設置或者通過Intent的flag來設置的。

<activity android:name=".MainActivity"android:launchMode="standard"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity>

1.1、默認啟動模式standard

? 如果開發時不在manifest設定,那么Activity的默認模式就是standard。在該模式下,啟動的Activity會依照啟動順序被依次壓入Task中:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1uLW4Et0-1644817774817)(/Users/caokun/Library/Application Support/typora-user-images/image-20220210102239166.png)]

返回頁面時也是依次銷毀頁面的,這是最簡單的一個模式。

1.2、棧頂復用模式singleTop

? 在該模式下,如果棧頂Activity為我們要新建的Activity(目標Activity),那么就不會重復創建新的Activity而是直接切換到該Acitvity;如果棧頂Activity不是我們要新建的Activity才會去新建一個Activity。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-an0K2YUI-1644817774817)(/Users/caokun/Library/Application Support/typora-user-images/image-20220210103854059.png)]

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".Activity2"android:launchMode="singleTop"><intent-filter><action android:name="ONETEXT_TWOACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><activity android:name=".Activity3"><intent-filter><action android:name="ONETEXT_THREEACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity> </application>

可以手動設置通過:android:launchMode="singleTop"對當前Activity進行設置啟動模式

通過這種設置可以避免已經創建過的Activity被重復創建

1.3、棧內復用模式singleTask

與singleTop模式相似,只不過singleTop模式是只是針對棧頂的元素,而singleTask模式下,如果task棧內存在目標Activity實例會將:將task內的對應Activity實例之上的所有Activity彈出棧。將對應Activity置于棧頂,獲得焦點。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uQUHyNUn-1644817774818)(/Users/caokun/Library/Application Support/typora-user-images/image-20220210105422872.png)]

1.4、全局唯一模式singleInstance

這是第四種模式,也是相對于比較復雜的一種模式:在該模式下,我們會為目標Activity分配一個新的affinity,并創建一個新的Task棧,將目標Activity放入新的Task,并讓目標Activity獲得焦點。新的Task且只有這一個Activity實例。 如果已經創建過目標Activity實例,則不會創建新的Task,而是將以前創建過的Activity喚醒(對應Task設為Foreground狀態)

這種啟動模式和singleTask幾乎一樣,它也只允許系統中存在一個目標Activity,包括上面我們所說的SingleTask的一些特性singleInstance都有。singleInstance翻譯過來是單例的意思:TA有兩層含義:1.告訴系統,我是獨一無二的,2.告訴任務棧我是獨一無二的,也就是說,任務棧中除了我不能再有其他Activity。

所以,如果要啟動singleInstance模式的Activity,那只能新創建一個任務棧用來放它,因為人家說了,“我是獨一無二的!”。同樣的,如果從這種啟動模式的Activity中啟動別的Activity,那不好意思,我不管你是不是和我處在同一個應用,我所在的任務棧只能擁有我一個人,您吶,另外讓系統給你創建一個任務棧待著去吧。

總結

以上是生活随笔為你收集整理的Android 四大组件之Activity的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。