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 第一个用于发送并行广播; 第二个用于发送粘性广播;
第三个用于发送串行广播;

Android Intent 解析之三,布布扣,bubuko.com

时间: 2024-08-27 17:55:17

Android Intent 解析之三的相关文章

Android Intent 解析之一

Intent的架构包括三方面: Client,也就是发送这个Intent的activity: Server,也就是activityManagerService.java,它主要是负责分发这些Intent给适当的对象: Target,也就是那些需要处理这个Intent的activity,我们称为Receiver: Intent的三个主要方面:Action.Data.Category在之前的文档中也有介绍,在此就不在叙述了. 下面回到前面的例子: Intent intent = new Intent

Android Intent 解析之二

服务端Intent执行过程: Sticky:这个类型的BroadCast表示某些Intent需要被保留,当新的应用起来后,需要关注这个消息,但是呢,又不需要启动这个应用来接收此消息,比如耳机插入等消息. 这个函数的主要作用就是根据这个Intent的特点,构造BroadCastRecord加入到不同的列表,等待被处理: 这样发送就到了下面这个函数中了: 控制到了scheduleBroadcastsLocked这里,它的逻辑很简单: private final void scheduleBroadc

Android问题集锦之三十八:not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

当我们保存图片后就会发个通知告诉系统让sdcard重新挂载,这样其他程序就会立即找到这张图片. Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_MOUNTED); intent.setData(Uri.fromFile(Environment .getExternalStorageDirectory())); sendBroadcast(intent); 但是到了Android4.4就不灵了,Google将ME

Android Intent简介

Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据, 而针对这3大组件,有独立的Intent传输机制,分别如下:1.Activity:通过将一个Intent对象传递给Context.startActivity()或Activity.startActivityForResult(), 启动一个活动或者使用一个已经存在的活动去做新的事情.2.Service:通过将一个Intent对象传递给Content.start

[Android] Intent详解

[转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互.Intent这

Android源代码解析之(三)-->异步任务AsyncTask

转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处理的基础,Handler是整个android应用层体系异步消息传递的基础组件,通过对Handler源代码的解析的解析相信大家对android中的异步消息机制有了一个大概的了解.很多其它关于android中的异步消息机制的知识可參考我的:android源代码解析之(二)–>异步消息机制 android

Android Intent 使用整理

在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成. 正如网上一些人解析所说,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent在这里起着实现调用者与被调用者之间的解耦作用.Intent传递过程中,要找到目标消费者(另一个Act

android Intent机制详解

什么是Intent Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求.比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,

Android Intent Scheme URLs攻击

0x0 引言 我们知道,在Android上的Intent-based攻击很普遍,这种攻击轻则导致应用程序崩溃,重则可能演变提权漏洞.当然,通过静态特征匹配,Intent-Based的恶意样本还是很容易被识别出来的. 然而最近出现了一种基于Android Browser的攻击手段--Intent Scheme URLs攻击.这种攻击方式利用了浏览器保护措施的不足,通过浏览器作为桥梁间接实现Intend-Based攻击.相比于普通Intend-Based攻击,这种方式极具隐蔽性,而且由于恶意代码隐藏