首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从源码角度看广播

包含的点 我这张图为了避免信息太多内容晦涩,有两个重要的过程没有画出来: 动态注册广播操作过程中,首先会检查sticky广播进行检查操作 静态广播的注册逻辑在PMS中,涉及对manifest文件的解析...调度时,AMS将在system_server端调用它的代理对象binder call到客户端,以在App端触发广播的onReceive方法 mRegisteredReceivers: 动态广播注册的核心对象...动态广播的派发是取出BroadcastFilter的ReceiverList对象,通过ProcessRecord拿到ApplicationThread的代理对象,binder call调用,随后在App中调用BroadcastReceiver.onReceive...方法;静态广播的派发是从ResolverInfo对象中取出processName, 再取出ProcessRecord, 最后在LoadedApk中调用了BroadcastReceiver.onReceive...表 广播发送中的入队列步骤主要是收集动态注册和静态注册的接收者,封装成一个BroadcastRecord,enqueue到队列中 广播发送中的派发步骤主要是调用binder call到各个客户端,执行BroadcastReceiver.onReceive

51340

Android点将台:传令官(使用级)

个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) 零、前言 1.本文的知识点 1).BroadcastReceiver`静态`使用 2).BroadcastReceiver...`动态`使用 3).BroadcastReceiver`有序`广播 4).BroadcastReceiver和`系统`行为的结合 5).小例子:使用BroadcastReceiver更新音乐播放器进度条...2.BroadcastReceiver总览 现在才发现BroadcastReceiver原来这么精简,纯源码才260 直接继承Object,没有实现接口,没有家庭背景,可以说是个很简单的类 类名...感觉从上面来看,BroadcastReceiveronReceive确实耦合性非常低 外部只需要用intent和context.sendBroadcast就能触发它 但似乎BroadcastReceiver...也没有太大的亮点,作用平平 为了说明他的亮点,现在我们新建一个app:Anotherapp 可以发现在另一个app里也能正常使用这个广播 这就有点意思了,我在A项目中写了一个类,它的方法可以在B项目中触发

9010
您找到你想要的搜索结果了吗?
是的
没有找到

Android应用界面开发——BroadcastReceiver(实现基于Service的音乐播放器)

实现BroadcastReceiver只要重写BroadcastReceiveronReceive(Context context, Intent intent)方法即可。...实例,并自动触发它的onReceiver()方法,如果onReceiver()方法不能在10秒内完成,Android就会认为该程序无响应(所以onReceiver()方法中不能进行耗时操作)。...n消息内容是" + msg, Toast.LENGTH_SHORT).show(); } } 当符合该MyReceiver的广播出现时,MyReceiver的onReceiver()方法就会被触发...对于有序广播,它会按优先级依次触发每个BroadcastReceiver的onReceiver()方法。...abortBroadcast()用于取消广播,如果这条代码生效,那么优先级比MyReceiver低的BroadcastReceiver都将不会被触发

1.6K20

8-26 Android学习ing

当用户触发了输入事件(如键盘输入,点击按钮等),如果应用5秒内没有响应用户的输入事件,那么,Android灰认为该应用无响应,便弹出ANR(Application No Response)对话框 在正常情况下...3.广播接收者的响应性 在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并且执行onReceive()方法,onReceive()方法执行完后,BroadcastReceiver...当onReceive()方法在10秒内没有执行完毕,Android会认为该程序无响应,所以在BroadcastReciever里边不能做一些比较耗时的操作,否则会弹出ANR错误对话框。...如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成,这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver...BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。

47030

Android四大组件:BroadcastReceiver史上最全面解析

(一般情况下是Activity)相应的消息循环队列中; 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。...(一般情况下是Activity)相应的消息循环队列中; 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。...接下来我将一步步介绍如何使用 4.1 自定义广播接收者BroadcastReceiver 继承自BroadcastReceivre基类 必须复写抽象方法onReceive()方法 广播接收器接收到相应广播后...,会自动回调onReceive()方法 一般情况下,onReceive方法会涉及与其他组件之间的交互,如发送Notification、启动service等 默认情况下,广播接收器运行在UI线程,因此,onReceive...Intent.ACTION_CLOSE_SYSTEM_DIALOGS 设备当前设置被改变时(界面语言、设备方向等) Intent.ACTION_CONFIGURATION_CHANGED 插入耳机时 Intent.ACTION_HEADSET_PLUG 正确移除

1.5K10

使用广播-BroadcastReceiver最详细解析

标题图 女孩:BroadcastReceiver是什么呀?...广播注册分动态和静态两种: 动态注册,需要继承BroadcastReceiver的,并重写onCreate()方法,和onReceive()方法,在onReceive()方法中,要实例接收器和IntentFilter...简化: 重写onCreate() 重写onDestroy() extends BroadcastReceiver 重写onReceive() 静态注册,只要在配置文件中修改代码即可,在AndroidManifest.xml...在本地广播重点说明:本地广播没有静态注册的方式,静态注册是为了程序在启动前也能收到广播,而发送本地广播时,我们的程序是已开启了的。 女孩:哥,讲的差不多了,已经掌握了,不过可以写一些代码例子吗?...{ // 复写onReceive()方法 @Override public void onReceive(Context context, Intent intent) { //写入接收广播后的操作

53320

Android开发之路--(2)--Android四大组件

二、 onStart :该方法的触发表示所属活动将被展现给用户。   三、 onResume :当一个活动和用户发生交互的时候,触发该方法。   ...五、 onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。...七、 onDestroy :当活动销毁的时候,触发该方法。和onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。...使用BroadcastReceiver组件接收广播消息比较简单,开发者只要实现自己的BroadcastReceiver子类,并重写onReceive(Context context,Intent intent...”(通过IntentFilter配置),BroadcastReceiveronReceive(Context context,Intent intent)方法将会被触发

78820

Carson带你学Android:手把手教你学会广播组件-BroadcastReceiver

前言 BroadcastReceiver(广播接收器),属于 Android 四大组件之一 在 Android 开发中,BroadcastReceiver 的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver...基类 必须复写抽象方法onReceive()方法 广播接收器接收到相应广播后,会自动回调 onReceive() 方法 一般情况下,onReceive方法会涉及 与 其他组件之间的交互,如发送Notification...BroadcastReceivre基类 public class mBroadcastReceiver extends BroadcastReceiver { // 复写onReceive()方法...Intent.ACTION_CLOSE_SYSTEM_DIALOGS 设备当前设置被改变时(界面语言、设备方向等) Intent.ACTION_CONFIGURATION_CHANGED 插入耳机时 Intent.ACTION_HEADSET_PLUG 正确移除...特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive

63410

Carson带你学Android:BroadcastRecevicer广播类型汇总

前言 BroadcastReceiver(广播接收器),属于 Android 四大组件之一,在 Android 开发中,BroadcastReceiver 的应用场景非常多。...); //发送广播 sendBroadcast(intent); 若被注册了的广播接收者中注册时intentFilter的action与上述匹配,则会接收此广播(即进行回调onReceive())。...Intent.ACTION_CLOSE_SYSTEM_DIALOGS 设备当前设置被改变时(界面语言、设备方向等) Intent.ACTION_CONFIGURATION_CHANGED 插入耳机时 Intent.ACTION_HEADSET_PLUG 正确移除...特别注意 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的: 对于静态注册(全局+应用内广播),回调onReceive...对于应用内广播的动态注册(非LocalBroadcastManager方式),回调onReceive(context, intent)中的context返回值是:Activity Context; 7.

46120

android学习笔记----自定义广播和系统广播

resultReceiver BroadcastReceiver:您自己的广播收发器作为广播的最终接收方。...@Override public void onReceive(Context context, Intent intent) { // 获取发送广播携带的数据...broadcast", Toast.LENGTH_SHORT).show(); } } } 运行结果: 另外还要说明,本地广播是无法通过静态注册方式来接收的,因为静态注册主要就是为了让程序在启动的情况下也能接收到广播...动态注册的广播接收器可以自由的控制与注销,在灵活性方面有很大的优势,但是它也存在一个缺点,就是必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()中的,那么有什么办法可以让程序启动的情况下就能接收到广播呢...)方法中添加过多的逻辑或进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法进行了较长时间而没有结束时,程序就会报错。

1.5K20
领券