8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
广播作为android四大组件之一,应用非常广泛,主要通过intent这个“介质”来传递信息,可以完成多应用消息传递(即发送一个广播,多个应用程序可以接收到)。
应用场景用于同一个app中不同进程的不同组件之间通信。
app可能同时存在有多个进程,比如定位进程、主进程等等,那么两个进程之间通信可以采用广播。用于不同app的组件之间的通信。
广播种类Normal Broadcast: Context.sendBroadcast.
标准广播,这种广播是完全异步的,所有接受者几乎都是在同一时间接受到广播的,因此也是没有顺序的,所以广播是无法截断的Ordered Broadcast: Context.sendOrderedBroadcast.
有序广播,这种广播时有顺序的,同一时间只有一个广播接受者接受到广播,并且只有当前接受者的逻辑之行完毕后才能向后传递,既然有先后顺序,所以这种广播是有优先级的,优先级高的接受者先接受广播,并且可以截断广播阻止先后传播。Local Broadcast: 只在app内传播。
Broadcast Receiver
静态注册
静态注册,即在manifest文件中进行注册,注册后,这个receiver一直运行,即使activity死掉、甚至进程死掉后,还是能够接收到广播,即使这样,静态注册不够灵活。
动态注册
动态注册,即在使用时再注册,动态注册后,其生命周期与所在的activity一致,要注意,在activity的onDestroy方法中,使用unregisterReceiver方法。
广播内部实现机制自定义BroadcastReceiver复写onReceive()方法。
广播发送者也想AMS进行注册后,发送广播。
AMS根据广播查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,并将广播发送到对应的消息循环队列中。
消息循环执行拿到此广播,回调BroadcastReceiver的onReceive()方法。
LocalBroadcastManager
本地广播就是一种只在app内部传播消息的广播,比起全局广播,其传递消息的效率更高,安全性更好(不用担心内部数据泄漏等等),使用这种广播也无法接受到其他app对你发送的该广播,所以不会因为广播引起安全漏洞的问题。
LocalBroadcastManager之所以能够实现高效和app内部通信,主要是因为其消息传递使用了Handler,其发送消息主要是通过Handler的sendMessage,这样就不同于Binder机制,Handler效率比Binder快,而且只能用于app内部。
其主要靠两个HashMap(mReceivers和mActions)和一个ArrayList(mPendingBroadcasts)。这些在源码解析在这里。
其他BroadcastReceiver的onReceive方法不能执行耗时操作,若执行时间过长,会报错。
BroadcastReceiver是不能开启线程的。