一個Android應用主要由四個基本組件組成,Android四大基本組件分別是Activity,Content Provider內容提供者,Service服務,BroadcastReceiver廣播接收器。
Services(服務)簡單來講就是剝奪界面的Activity。它和Activity不少概念都是類似的,都是封裝有一個完整的功能邏輯實現。
Services是運行在後臺的一段代碼,它能夠運行在它本身的進程,也能夠運行在其餘應用程序進程的上下文(context)裏面,其它的組件能夠綁定到一個服務(Service)上面,經過遠程過程調用(RPC)來調用這個方法。常見的Services如後臺音樂播放,後臺計算數據。android
服務有兩種運行方式,原理以下:app
官方生命週期的圖示:
ide
a、繼承service類(位於android.app包下,通常用它的子類IntentService)學習
b、AndroidManifast.xml配置清單文件中
<service name=".XXXX"/>
c、服務不能本身運行,須要經過Contex.startService()或Contex.bindService()啓動服務
經過startService()方法啓動的服務於調用者沒有關係,即便調用者關閉了,服務仍然運行想中止服務要調用Context.stopService(),此時系統會調用onDestory(),使用此方法啓動時,服務首次啓動系統先調用服務的onCreate()-->onStart(),若是服務已經啓動再次調用只會觸發onStart()方法使用bindService()啓動的服務與調用者綁定,只要調用者關閉服務就終止,使用此方法啓動時,服務首次啓動系統先調用服務的onCreate()-->onBind(),若是服務已經啓動再次調用不會再觸發這2個方法,調用者退出時系統會調用服務的onUnbind()-->onDestory(),想主動解除綁定可以使用Contex.unbindService(),系統依次調用onUnbind()-->onDestory();
區別使用 startService()仍是bindService()就要看是否要和調用者進行通訊,因爲startService()和訪問者不存在太多聯繫,全部有進行通訊的要用bindService()。經過Service提供IBinder OnBind(Intent intent) 返回要通訊的數據,在OnServiceConnected()方法 返回該Binder給調用者。
廣播接收器用於響應來自其餘應用程序或者系統的廣播消息。這些消息有時被稱爲事件或者意圖。例如,應用程序能夠初始化廣播來讓其餘的應用程序知道一些數據已經被下載到設備,並能夠爲他們所用。這樣廣播接收器能夠定義適當的動做來攔截這些通訊。xml
有如下兩個重要的步驟來使系統的廣播意圖配合廣播接收器工做。對象
廣播接收器須要實現爲BroadcastReceiver類的子類,並重寫onReceive()方法來接收以Intent對象爲參數的消息。blog
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); }
應用程序經過在AndroidManifest.xml中註冊廣播接收器來監聽制定的廣播意圖。假設咱們將要註冊MyReceiver來監聽系統產生的ACTION_BOOT_COMPLETED事件。該事件由Android系統的啓動進程完成時發出。繼承
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"> </action> </intent-filter> </receiver> </application>
如今,不管何時Android設備被啓動,都將被廣播接收器MyReceiver所攔截,而且在onReceive()中實現的邏輯將被執行。接口
有許多系統產生的事件被定義爲類Intent中的靜態常量值。下面列舉了重要的系統事件。