android深入四大组件(四)广播的注册、发送和接收过程

android深入四大组件(四)广播的注册、发送和接收过程

ID:14164360

大小:171.50 KB

页数:13页

时间:2018-07-26

android深入四大组件(四)广播的注册、发送和接收过程_第1页
android深入四大组件(四)广播的注册、发送和接收过程_第2页
android深入四大组件(四)广播的注册、发送和接收过程_第3页
android深入四大组件(四)广播的注册、发送和接收过程_第4页
android深入四大组件(四)广播的注册、发送和接收过程_第5页
资源描述:

《android深入四大组件(四)广播的注册、发送和接收过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android深入四大组件(四)广播的注册、发送和接收过程1.广播的注册过程BroadcastReceiver的注册分为两种,分别是静态注册和动态注册,静态注册在应用安装时由PackageManagerService来完成注册过程,关于这一过程,我会在后续的介绍PackageManagerService文章中详细介绍。这里只介绍BroadcastReceiver的动态注册。要想动态注册BroadcastReceiver,需要调用registerReceiver方法,它的实现在ContextWrapper中,代码如下所示。frameworks/base/core/J

2、ava/android/content/ContextWrapper.javaOverridepublicIntentregisterReceiver(BroadcastReceiverreceiver,IntentFilterfilter){returnmBase.registerReceiver(receiver,filter);}ContextImpl的registerReceiver方法有很多重载的方法最终会调用registerReceiverInternal方法:frameworks/base/core/java/android/app/ContextI

3、mpl.javaprivateIntentregisterReceiverInternal(BroadcastReceiverreceiver,intuserId,IntentFilterfilter,StringbroadcastPermission,Handlerscheduler,Contextcontext){IIntentReceiverrd=null;if(receiver!=null){if(mPackageInfo!=null&&context!=null){//1if(scheduler==null){scheduler=mMainThread.

4、getHandler();}rd=mPackageInfo.getReceiverDispatcher(receiver,context,scheduler,mMainThread.getInstrumentation(),true);//2}else{if(scheduler==null){scheduler=mMainThread.getHandler();}rd=newLoadedApk.ReceiverDispatcher(receiver,context,scheduler,null,true).getIIntentReceiver();//3}}try

5、{finalIntentintent=ActivityManagerNative.getDefault().registerReceiver(mMainThread.getApplicationThread(),mBasePackageName,rd,filter,broadcastPermission,userId);//4if(intent!=null){intent.setExtrasClassLoader(getClassLoader());intent.prepareToEnterProcess();}returnintent;}catch(Remote

6、Exceptione){throwe.rethrowFromSystemServer();}在注释1处判断如果LoadedApk类型的mPackageInfo不等于null并且context不等null就调用注释2处的代码通过mPackageInfo的getReceiverDispatcher方法获取rd对象,否则就调用注释3处的代码来创建rd对象。注释2和3的代码的目的都是要获取IIntentReceiver类型的rd对象,IIntentReceiver是一个Binder接口,用于进行跨进程的通信,它的具体实现在LoadedApk.ReceiverDispatc

7、her.InnerReceiver,如下所示。frameworks/base/core/java/android/app/LoadedApk.javastaticfinalclassReceiverDispatcher{finalstaticclassInnerReceiverextendsIIntentReceiver.Stub{finalWeakReferencemDispatcher;finalLoadedApk.ReceiverDispatchermStrongRef;InnerReceiver(

8、Loade

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。