一个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中的静态常量值。下面列举了重要的系统事件。