標籤:
android 4大組件是android的靈魂,每一個APP的開發必然離不開它們。
現在總的說一說他們的功能和用法:
1、Activity
應用程式中Activity就是一個螢幕的介面,你的眼睛看到的就是一個Activity。
Activity的生命週期:這個是應用開發中比較重要的部分,瞭解activity在每個階段的生命週期對我們的開發是至關重要的;
首先啟動一個Activity1 onCreate->onStart->onResume
接著跳轉到Activity2 Activity1的生命週期變化:onPause->onStop
Activity2的生命週期變化:onCreate->onStart->onResume
回到Activity1 Activity2的生命週期變化 :onPause->onStop->onDestory
Activity1的生命週期變化:onReStart->onStart->onResume
每次啟動Activity時OnCreate只會調用一次
2、Service
Service是不可見的,運行在背景,它是啟動並執行主線程的,所以在Service執行時間比較長的任務時必須使用非同步處理,不然會造成ANR。
Service的兩種開啟檔案:
1.在設定檔裡註冊:
<service android:name="MyService1">
<intent-filter>
<action android:name="XXXXXXXX"/>
</intent-filter>
</service>
2.啟動service
啟動Service有兩種啟動方式:Context.StartService() Context.bindService();
現在來說說這兩種啟動方式的區別:
(1)StartService 的啟動的生命週期是 onCreate->onStart->onStartCommand
onCreate在Service啟動時只會調用一次,以後每次啟動同樣的Service只會調用onStart,通過StartServce啟動的Service與調用者沒有關係,調用者關閉了,還會在後台運行,只有當調用ConText.StopService時才會停止銷毀 onStop->onDestory
(2)bindService啟動的生命週期是 onCreate->onBind
onCreate在Service啟動時只會調用一次,以後每次啟動同樣的Sevice只會調用onBind,通過bindSrivice啟動的Service在調用者關閉時,service也會跟著關閉。
3、BroadcastReceive(廣播接收者)
我對broadcasereceive的理解是broadcasereceive是接收外部訊息事件,然後根據程式的邏輯進行一些處理,如:來電、開機、Notification等等。broadcasereceive也是不可見的,但是可以啟動Activity和service.
監聽broadcasereceive的步驟:
1.首先寫個類繼承BroadCastReceiver,並實現裡面的onReceive方法,在這個方法裡用來判斷廣播的類型,從而進行相應的操作。
2.註冊廣播接收者
(1)通過設定檔註冊:
<receiver android:name=".MyReceiver" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter></receiver >
(2)在JAVA代碼裡註冊:
IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(myReceiver ,intentFilter);
注意:
1.廣播的生命週期一般只有10s左右,在廣播裡執行比較耗時的操作就會有可能造成ANR,如果需要完成一項比較耗時的工作 , 應該通過發送 Intent 給 Service, 由Service 來完成 . 這裡不能使用子線程來解決 , 因為 broadcastReceiver 的生命週期很短 , 子線程可能還沒有結束broadcastReceiver 就先結束,broadcastReceiver 一旦結束 , 此時 BroadcastReceiver 的所在進程很容易在系統需要記憶體時被優先殺死 , 因為它屬於空進程 . 如果它的宿主進程被殺死 , 那麼正在工作的子線程也會被殺死 . 所以採用子線程來解決是不可靠的
2.動態註冊廣播接收器還有一個特點,就是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要裝置是開啟狀態,廣播接收器也是開啟著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用系統常見廣播Intent,如開機啟動、電池電量變化、時間改變等廣播
4、Content Provider內容提供者
ContentProvider(內容提供者)是Android中的四大組件之一。主要用於對外共用資料,也就是通過ContentProvider把應用中的資料共用給其他應用訪問,其他應用可以通過ContentProvider對指定應用中的資料進行操作。ContentProvider分為系統的和自訂的,系統的也就是例如連絡人,圖片等資料。
1.android中對資料操作包含有:
file, sqlite, Preferences, ContectResolver與ContentProvider前三種資料操作方式都只是針對本應用內資料,程式不能通過這三種方法去操作別的應用內的資料。android中提供ContectResolver與ContentProvider來操作別的應用程式的資料。
2.使用方式:
一個應用實現ContentProvider來提供內容給別的應用來操作,
一個應用通過ContentResolver來操作別的應用資料,當然在自己的應用中也可以
android 4大組件詳解