1.系统启动的时候启动一个service
如何实现?
我们学完BroadCastReceiver
之后,我们可以写一个BroadCastReceiver
接收系统启动时的消息,因为系统启动之后是会发消息的,然后我们在onReceive()
中启动service
,这样就实现了系统启动的时候启动服务。
2.Broadcastreceiver
接收到消息后宿主进程的生命周期
当我们安装了自己写的Broadcastreceiver
的程序后,其中的receiver
会被放入一个队列中,这个队列的排序是根据intent-filter
来排列的,当
系统发送了一个消息后,这个消息需要被分发,于是就会在之前那个队列中寻找receiver
,我们把这个队列称为分发队列,这个寻找是通过intent-filter
来寻找的,找到之后将这个消息分发给对应的receiver
,通过Broadcastreceiver
来启动这个进程,这时需要注意,这个自己写的Broadcastreceiver
中的Activity
是没有启动的。当完成这个消息的处理后,没有Activity
与这个进程交互,然后这个进程就会变成emptyprocess
,等待系统的回
收,这个与contentprovider
类似。这个就是说,如果要长期运行宿主进程,那么最好用service
3.广播接收是在子线程吗?
不是,发广播的时候是异步的(同步是指需要等待对方的回复再进行下一步,比如http的访问请求,当我们输入关键字查询时,如果没有返回值我们是看
不到内容的,而异步则是不需要等待对方的回复),异步我们就会想到多线程,但是Broadcastreceiver
中的onReceive()
方法则是在主线程中的,
并不是在子线程中,也就是说我们要更新ui,我们可以直接在onReceiver()
中实现,但是同时需要提一点,若在onReceive()
方法执行耗时的操
作,则会出现ANR(application null response),这里顺便说一下出现ADR的两种情况,第一种:事件分发超过5秒,第二种:接收到消息后10秒钟
内没有处理完。