Android Service 服务 安卓广播机制

来源:互联网 发布:2017年海外代购数据 编辑:程序博客网 时间:2024/05/01 13:13

Service简介

Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。

Service的启动有两种方式:context.startService()context.bindService()

 

Service启动流程

context.startService() 启动流程:

context.startService()  ->onCreate()  -> onStartCommand()  -> Service running  -> context.stopService()  -> onDestroy()  -> Servicestop 

 

如果Service还没有运行,则android先调用onCreate(),然后调用onStart(),android2.1以后用onStartCommand()代替onStart() ;

如果Service已经运行,则只调用onStartCommand(),所以一个Service的onStart方法可能会重复调用多次。 

如果stopService的时候会直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。

所以调用startService的生命周期为:onCreate--> onStart (可多次调用) -->onDestroy

 

context.bindService()启动流程:

context.bindService()  -> onCreate() -> onBind()  -> Service running -> onUnbind()  -> onDestroy()  -> Servicestop
 

onBind()将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的实例、运行状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。 

所以调用bindService的生命周期为:onCreate--> onBind(只一次,不可多次绑定) --> onUnbind--> onDestory。

在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。

 

Service生命周期 

Service的生命周期并不像Activity那么复杂,它只继承了onCreate()、onStartCommand()、onDestroy()三个方法

当我们第一次启动Service时,先后调用了onCreate()、onStartCommand ()这两个方法;当停止Service时,则执行onDestroy()方法。

这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

它可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己,只要调用一次stopService()方法便可以停止服务,无论调用了多少次的启动服务方法。

 

安卓广播机制
 
  • 在Android 中如果要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。
  • 使用广播必须要有一个intent 对象必设置其action动作对象
  • 使用广播必须在配置文件中显式的指明该广播对象
  • 每次接收广播都会重新生成一个接收广播的对象
  • 在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理
android广播机制

1、消息广播域接受:

(1)、消息发送者:将广播消息发送出去

                           自定义消息:想法什么就发什么;

                           系统消息:发送系统的一些信息(电池信息,启动信息,短信信息……)【注意:action名字:全局唯一。可以不用包名。】

                           消息载体:intent

                           消息的接受者:接收到消息后,做处理(任何处理)!【注意:实现类继承BroadcastReceiver类(内部类:实现BroadcastReceiver接口);注册:告诉系统,我有一个消息接受者,正在接受消息。静态的声明:androidManifest.xml(Reveiver节点(XML的说法))。动态声明:registerBroadCast();unregisterBroadCast();】

sendBroadcast()——》intent--onReceive()

sendBroadcast:普通广播

sendOrderedBroadcast:排序广播

sendStickBroadcast:(普通广播)

service

进程、线程的区别?

service由进程或者线程实现。

线程就是线程。

进程就是进程。

区别不是很大:服务可以干的事,进程和线程也可以干。

如果你的业务:service没有用户直接跟你的应用交互的时候,其他的应用,或者是其他的服务,跟你的交互。我的应用仅仅是在后台运行,没有前台Activity,也不需要前台的activity的时候。

线程:有用户跟你的应用交互。要得到执行的返回结果。有前台交互Activity比较适合线程。

 

2、registerReceiver函数用几次,发送广播的接受者就会有几个。

3、unregisterReceiver函数用一次,只会解除一个消息接受者。

4、sendOrderedBroadCast()方法,根据消息接受者的优先级,一个个的顺序调用接受者,执行处理逻辑。

5、sendBroadcast()方法,一次发出去消息后,消息接收着,同时执行


0 0
原创粉丝点击