在日常开发中常常用到Intent,例如在启动Activity , 启动service ,发送广播时都须要指定一个Intent, Intent 是一个将要执行动做的抽象描述,一笑消息的传递对象,负责各个组件之间的通信android
Intent 是一个消息传递对象,您能够用来从其余应用组件请求操做。尽管 Intent 能够经过多种方式促进组件之间的通讯,但其基本用例主要包括如下三个bash
Activity表示一个应用页面,经过Intent传递给StartActivity()来启动新的页面,Intent 用于描述要启动的 Activity,并携带任何须要的数据 。 若是但愿在Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,您的 Activity 将结果做为单独的 Intent 对象接收服务器
Service 是一个不使用用户界面而在后台执行操做的组件,您可使用 Service 类的方法来启动服务。经过将 Intent 传递给 startService(),您能够启动服务执行一次性操做(例如,下载文件)。Intent 用于描述要启动的服务,并携带任何须要的数据。 若是服务旨在使用客户端-服务器接口,则经过将 Intent 传递给 bindService(),您能够从其余组件绑定到此服务spa
广播是任何应用都可接收的消息,系统将针对系统事件(例如:系统启动或设备开始充电时)传递各类广播。经过将 Intent 传递给 sendBroadcast() 或 sendOrderedBroadcast(),您能够将广播传递给其余应用code
Intent 对象主要包含七大属性,Action(动做)、Data(数据)、Category(类别)、Type(数据类型)、Component(组件)、Extra(扩展信息)、Flag(标志位)。其中最经常使用的是Action和Data对象
Action主要表示意图的行为,,指定该Intent要执行的动做类型 常见的action有: Activity Actions:接口
类型 | 做用 |
---|---|
ACTION_MAIN | 表示程序入口 |
ACTION_VIEW | 自动以最合适的方式显示Data |
ACTION_CALL | 拨打Data指向的号码 |
ACTION_SEND | 发送Data到指定的地方 |
ACTION_SEARCH | 执行搜索 |
Broadcast Actions:进程
类型 | 做用 |
---|---|
ACTION_TIME_TICK | 当前时间改变,并即时发送时间,只能经过系统发送。调用格式"android.intent.action.TIME_TICK" |
ACTION_TIME_CHENGED | 设置时间。调用格式"android.intent.action.TIME_SET" |
例如查看通信录的我的信息就是以Uri的形式传递数据事件
一个包含Intent额外信息的字符串,表示哪一种类型的组件来处理这个Intent内存
通常Intent的数据类型可以根据数据自己进行断定,可是经过设置这个属性,能够强制采用显式指定的类型而再也不进行推导
指定Intent的目标组件名称,当指定了这个属性后,系统将跳过匹配其余属性,而直接匹配这个属性来启动对应的组件
Intent能够携带的额外 key-value 数据,你能够经过调用putExtra()方法设置数据,每个 key对应一个 value数据。你也能够经过建立 Bundle对象来存储全部数据,而后经过调用putExtras()方法来设置数据
用来指示系统如何启动一个Activity,能够经过setFlags()或者addFlags()能够把标签flag用在Intent中
Intent intent = new Intent(getApplicationContext(), MvpActivity.class);
startActivity(intent);
复制代码
Uri uri = Uri.parse("https://www.baidu.com");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);
复制代码
使用隐式 Intent 时,Android 系统经过将 Intent 的内容与在设备上其余应用的清单文件中声明的 Intent 过滤器进行比较,从而找到要启动的相应组件。若是 Intent 与 Intent 过滤器匹配,则系统将启动该组件,并向其传递 Intent 对象。若是多个 Intent 过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。
Intent 过滤器是应用清单文件中的一个表达式,用于指定该组件要接收的 Intent 类型。例如,经过为 Activity 声明 Intent 过滤器,您可使其余应用可以直接使用某一特定类型的 Intent 启动 Activity。一样,若是您没有为 Activity 声明任何 Intent 过滤器,则 Activity 只能经过显式 Intent 启动
StartActivity时候最终调用了ActivityManger.getService().startActivity的方法,并涉及到了进程间通信,️而所映射的Binder内存大小是不到1M的,准确说是 (1024*1024) - (4096 *2) :这个限制定义在,因此最大的传输数据是不超过1M的数据