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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android 安卓 四大组件

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

Android開發的四大組件?
Android四大組件分別為activity、service、content provider、broadcast receive?
一、Activity?
?
Activity生命周期的方法是成對出現的

onCreate() & onDestory()?
onStart() & onStop()?
onResume() & onPause()

每一個活動( Activity)都處于某一個狀態,對于開發者來說,是無法控制其應用程序處于某一個狀態的,這些均由系統來完成。 但是當一個活動的狀態發生改變的時候,開發者可以通過調用onXX() 的方法獲取到相關的通知信息。 在實現 Activity 類的時候,通過覆蓋( override )這些方法即可在你需要處理的時候來調用。?
一,onCreate:當活動第一次啟動的時候,觸發該方法,可以在此時完成活動的初始化工作。onCreate方法有一個參數,該參數可以為空(null),也可以是之前調用onSaveInstanceState方法保存的狀態信息。 二,在onStart:方法該觸發的所屬表示將活動被展現給用戶四,在onPause:當一個正在前臺運行的活動因為其他的活動需要前臺運行而轉入后臺運行的時候,觸發該方法。這時候需要將活動的狀態持久化,比如正在編輯的數據庫記錄等。 五,onStop:當一個活動不再需要展示給用戶的時候,觸發該方法。如果內存緊張,系統會直接結束這個活動,而不會觸發onStop方法。所以保存狀態信息是應該在onPause時做,而不是onStop時做。活動如果沒有在前臺運行,都將被停止或者Linux管理進程為了給新的活動預留足夠的存儲空間而隨時結束這些活動。因此對于開 者來說,在設計應用程序的時候,必須時刻牢記這一原則。在一些情況下,在onPause方法或許是活動觸發的最后的方法,因此開發者需要在這個時候保存需要保存的信息。六,onRestart :當處于停止狀態的活動需要再次展現給用戶的時候,觸發該方法。七,onDestroy:當活動銷毀的時候,觸發該方法。和onStop方法一樣,如果內存緊張,系統會直接結束這個活動而不會觸發該方法·。 的onSaveInstanceState:系統調用該方法,允許活動保存之前的狀態,比如說在一串字符串中的光標所處的位置等活動棧

每個Activity的狀態是由它在Activity棧(是一個后進先出LIFO,包含所有正在運行Activity的隊列)中的位置決定的。?
當一個新的Activity啟動時,當前的活動的Activity將會移到Activity棧的頂部。?
?
一個應用程序的優先級是受最高優先級的Activity影響的。當決定某個應用程序是否要終結去釋放資源,Android內存管理使用棧來決定基于Activity的應用程序的優先級。?
Activity狀態?
Activity有以下四種狀態:?
活動的:當一個Activity在棧頂,它是可視的、有焦點、可接受用戶輸入的。Android試圖盡最大可能保持它活動狀態,殺死其它Activity來確保當前活動Activity有足夠的資源可使用。當另外一個Activity被激活,這個將會被暫停。?
暫停:在很多情況下,你的Activity可視但是它沒有焦點,換句話說它被暫停了。有可能原因是一個透明或者非全屏的Activity被激活。?
當被暫停,一個活動仍會當成活動狀態,只不過是不可以接受用戶輸入。在極特殊的情況下,機器人將會殺死一個暫停的活動來為活動的活動提供充足的資源。當一個活動變為完全隱藏,它將會變成停止。停止:。當一個活動不是可視的,它“停止”了這個活動將仍然在內存中保存它所有的狀態和會員信息盡管如此,當其它地方需要內存時,它將是最有可能被釋放資源的。當一個活動停止后,一個很重要的步驟是要保存數據和當前UI狀態。一旦一個活動退出或關閉了,它將變為待用狀態。待用:。在一個活動被殺死后和被裝在前,它是待用狀態的待用胡亞蓉被移除活動棧,并且需要在顯示和可用之前重新啟動它的活性的四種加載模式在機器人的多活性開發中,活動之間的跳轉可能需要有多種方式,有時是普通的生成一個新實例 有時希望跳轉到原來某個活動實例,而不是生成大量的重復的活性。加載模式便是決定以哪種方式啟動一個跳轉到原來某個活動實例。在機器人里,有4種活性的啟動模式,分別為:·standard:標準模式,一調用startActivity()方法就會產生一個新的實例?!ingleTop:如果已經有一個實例位于Activity stack的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。如果不位于棧頂,會產生一個新的實例?!ingleTask:會在一個新的任務中產生這個實例,以后每次調用都會使用這個,不會去產生新的實例了。

·singleInstance:這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其他的實例。?
這些啟動模式可以在功能清單文件AndroidManifest.xml中進行設置,中的launchMode屬性。?
相關的代碼中也有一些標志可以使用,比如我們想只啟用一個實例,則可以使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT?
標志,這個標志表示:如果這個activity已經啟動了,就不產生新的activity,而只是把這個activity實例加到棧頂來就可以了。1、Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);?
2、intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);?
3、startActivity(intent);?
復制代碼?
Activity的加載模式受啟動Activity的Intent對象中設置的Flag和manifest文件中Activity的元素的特性值交互控制。

FLAG_ACTIVITY_NEW_TASK?
FLAG_ACTIVITY_CLEAR_TOP?
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED?
FLAG_ACTIVITY_SINGLE_TOP

核心的特性有:

taskAffinity?
launchMode?
clearTaskOnLaunch?
alwaysRetainTaskState?
finishOnTaskLaunch

四種加載模式的區別 所屬task的區別?
一般情況下,“standard”和”singleTop”的activity的目標task,和收到的Intent的發送者在同一個task內,就相當于誰調用它,它就跟誰在同一個Task中。?
除非Intent包括參數FLAG_ACTIVITY_NEW_任務。如果提供了FLAG 活動新_ TASK參數,會啟動到別的任務里。“singleTask”和” singleInstance”總是把要啟動的活動作為一個任務的根元素,他們不會被啟動到一個其他任務里。是否允許多個實例“standard”和“singleTop”可以被實例化多次,并且是可以存在于不同的任務中;這種實例化時一個任務可以包括一個activity的多個實例; “ singleTask“和”singleInstance“則限制只生成一個實例,并且是task的根元素。singleTop要求如果創建intent的時候棧頂已經有要創建的Activity的實例,則將intent發送給該實例,而不創建新的實例。是否允許其它活動存在于本任務內“singleInstance”獨占一個任務,其它活動不能存在那個任務里; 如果它啟動了一個新的活動,不管新的活動的啟動模式如何,新的活動都將會到別的任務里運行(如同加了FLAG 活動 NEW_TASK參數)。而另 三種模式,則可以和其它活動共存。是否每次都生成新實例

“standard”對于每一個啟動Intent都會生成一個activity的新實例;?
“singleTop”的activity如果在task的棧頂的話,則不生成新的該activity的實例,直接使用棧頂的實例,否則,生成該activity的實例。?
“singleInstance”是其所在棧的唯一activity,它會每次都被重用。?
“singleTask” 如果在棧頂,則接受intent,否則,該intent會被丟棄,但是該task仍會回到前臺。?
當已經存在的activity實例處理新的intent時候,會調用onNewIntent()方法,如果收到intent生成一個activity實例,那么用戶可以通過back鍵回到上一個狀態;如果是已經存在的一個activity來處理這個intent的話,用戶不能通過按back鍵返回到這之前的狀態。?
———————————–?
二、Service?
service可以在和多場合的應用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在后臺繼續播放,比如檢測SD卡上文件的變化,再或者在后臺記錄你地理信息位置的改變等等,總之服務嘛,總是藏在后頭的。?
Service是在一段不定的時間運行在后臺,不和用戶交互應用組件。每個Service必須在manifest中?
通過來聲明??梢酝ㄟ^contect.startservice和contect.bindserverice來啟動。?
Service和其他的應用組件一樣,運行在進程的主線程中。這就是說如果service需要很多耗時或者阻塞的操作,需要在其子線程中實現。

啟動service,根據onStartCommand的返回值不同,有兩個附加的模式:?
1、START_STICKY 用于顯示啟動和停止service。?
2、START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要處理時才運行的模式。?
服務不能自己運行,需要通過調用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。?
1、 使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。?
如果打算采用Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。?
如果調用startService()方法前服務已經被創建,多次調用startService()方法并不會導致多次創建服務,但會導致多次調用onStart()方法。?
采用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。?
2、使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。?
onBind()只有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法并不會導致該方法被多次調用。采用Context.bindService()方法啟動服務時只能調用onUnbind()方法解除調用者與服務解除,服務結束時會調用的onDestroy()方法。擁有服務的進程具有較高的優先級1.如果service正在調用onCreate,onStartCommand或者onDestory方法,那么用于當前service的進程則變為前臺進程以避免被殺死。2.如果當前服務已經被啟動(start),擁有它的進程則比那些用戶可見的進程優先級低一些,但是比那些不可見的進程更重要,這就意味著服務一般不會被殺死。3。如果客戶端已經連接到service(bindService),那么擁有Service的進程則擁有最高的優先級,可以認為service是可見的。4.如果service可以使用startForeground(int,Notification)方法來將service設置為前臺狀態,那么系統就認為是對用戶可見的,并不會在內存不足時被殺。如果有其他的應用組件作為服務,活動等運行在相同的進程中,那么將會增加該進程的重要性。本地服務1.不需和活動交互的本地服務2.本地服務和活動交互\ ———————–

三、Broadcast Receiver?
是一個全局的監聽器,屬于Android四大組件之一?
作用是監聽 / 接收 應用 App 發出的廣播消息,并 做出響應?
應用場景為

1、Android不同組件間的通信?
2、多線程通信?
3、與Android系統在特定情況下的通信

四、Content Provider詳解

ContentProvider(內容提供者)是Android中的四大組件之一。主要用于對外共享數據,也就是通過ContentProvider把應用中的數據共享給其他應用訪問,其他應用可以通過ContentProvider對指定應用中的數據進行操作。ContentProvider分為系統的和自定義的,系統的也就是例如聯系人,圖片等數據。?
android中對數據操作包含有:?
file, sqlite3, Preferences,ContectResolver與ContentProvider前三種數據操作方式都只是針對本應用內數據,程序不能通過這三種方法去操作別的應用內的數據。?
android中提供ContectResolver與ContentProvider來操作別的應用程序的數據。?
使用方式:?
一個應用實現ContentProvider來提供內容給別的應用來操作,?
一個應用通過ContentResolver來操作別的應用數據,當然在自己的應用中也可以。?
1.ContentProvider?
Android提供了一些主要數據類型的ContentProvider,比如音頻、視頻、圖片和私人通訊錄等??稍赼ndroid.provider包下面找到一些Android提供的ContentProvider。通過獲得這些ContentProvider可以查詢它們包含的數據,當然前提是已獲得適當的讀取權限。

2.ContentResolver?
當外部應用需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,可以使用ContentResolver類來完成,要獲取ContentResolver對象,可以使用Context提供的getContentResolver()方法。?
3.Uri?
Uri指定了將要操作的ContentProvider,其實可以把一個Uri看作是一個網址,我們把Uri分為三部分。?
第一部分是”content://”??梢钥醋魇蔷W址中的”http://”。?
第二部分是主機名或authority,用于唯一標識這個ContentProvider,外部應用需要根據這個標識來找到它??梢钥醋魇蔷W址中的主機名,比如”blog.csdn.net”。?
第三部分是路徑名,用來表示將要操作的數據??梢钥醋骶W址中細分的內容路徑。

作者:陳進楊

原文鏈接:點擊這里
---------------------?
作者:fjnu_se?
來源:CSDN?
原文:https://blog.csdn.net/fjnu_se/article/details/80854205?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

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

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