首页 > 代码库 > Android Intent 解析之三
Android Intent 解析之三
Intent的接收过程:
1、Receiver的注册
这个之前已经介绍过了
接下来就看看上面遗留的两个接收函数了, scheduleReceiver scheduleRegisteredReceiver;
scheduleReceiver会掉到activitythread.java中的scheduleReceiver函数, activitythread.java这个就是目标activity的主体,然后该函数就调用到该文件中的handlemessage函数,这个函数在收到RECEIVER消息后就调用handleReceiver来处理,这是一个重要的函数,下面分析一下这个函数的处理:
1,取得这个Intent指向的component,包括包名,类名;
2,取得包信息,这个结构提供了getClassLoader接口;
3,通过java.lang.ClassLoader cl = packageInfo.getClassLoader取得classLoader; 4,动态创建一个receiver,receiver = (BroadcastReceiver)cl.loadClass(component).newInstance(); 5,调用receiver.onReceive(context.getReceiverRestrictedContext(), data.intent),进入到真正的处理流程中去了; 6,调用finishReceiver来触发ActivityManagerService这个消息到其它receivers的发送或者下一个broadcast的发送;
这其中最重要的就是这个onReceive函数,我们通常都会实现这么一个函数,然后在里面处理我们收到的消息;
scheduleRegisteredReceiver的逻辑
这个函数其实就是针对你使用动态注册的方式而弄的,也就是你在代码的中调用register注册的方式。
总结:
Intent 从使用的角度来说,就是构造Intent,提供适当的参数,比如Action,比如数据类型,数据的uri等,然后发送出去;接收方需要注册一个 receiver,然后提供onReceive函数就可以了;这个注册可以简单的写在AndroidManifest.xml里面也可以通过 registerReceiver来完成; 发送的时候有三个API可以用: sendBroadcast sendStickyBroadcast sendOrderedBroadcast 第一个用于发送并行广播; 第二个用于发送粘性广播; 第三个用于发送串行广播;