Android四大组件知识

来源:互联网 发布:应用备份软件 编辑:程序博客网 时间:2024/06/06 07:15

{Service}

1.简介Service,有几种启动方式?

Service是专门在后台处理长时间任务的Android组件,它没有UI。
两种启动方式:startService和bindService。

2.启动方式的区别

startService只是启动Service,启动它的组件和service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。

bindService启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。

3.两种调用方式对Service生命周期函数影响

startService()  -->  onCreate()  -->  onStartCommand()  -->  Service running  --> onDestroy()  -->Service shut down  Unbounded service

bindService()  -->  onCreate()  -->  onBind()  -->  Clients are bound to service  -->onUnBind()  -->onDestroy()  -->Service shut down  Bounded service


{Broadcast}

1、sendBroadcast 无序广播,会异步的发送给所有Recevier,接受广播的顺序是不确定的,有可能是同时的。

 sendOrderBroadcast 有序广播,广播会先发送给优先级高(android:priority)的Recevier,而这个Recevier有权决定是继续发送到下一个Recevier或者是终止广播。

--------------------sendStickyBroadcast发送Sticky类型的广播,简单说就是在发送广播时Recevier还没有被注册,但它注册后还是可以收到它之前发送的广播--------------------

2、基于数据安全考虑,想发送广播只有自己(本进程)能接收到,该如何去做呢?

使用Handler,往主线程的消息池发送消息,只有主线程的Handler可以分发处理它,广播发送的内容是一个Intent对象,可以直接用Message封装一下,留一个和sendBroadcast一样的接口,在handleMessage时把Intent对象传递给已注册的Recevier。

3.使用广播来更新界面是否合适?

较频繁地刷新,建议还是不要使用,广播的发送和接受是有一定代价的,它的传输是通过Binder进程间通信机制来实现的,那么系统定会为广播能顺利传递做一些进程间通信的准备。除此之外,还可能其他因素让广播发送和到达不准时。(Android的ActivityManagerService有一个专门的消息队列来接受发送出来的广播,sendBroadcast执行完后就立即返回,但这时发送来的广播只是被放入到队列,并不一定马上被处理,当处理到当前广播时,又会把这个广播分给注册的广播接收分发器RecevierDispatcher,最后把广播交接给Reciver所在的线程的消息队列处理(Messager Queue)。整个过程从发送-ActivityManagerService-ReceiverDispatch进行了两次Binder进程间通信,最后还要交给UI的消息队列。)


原创粉丝点击