Android之Intent简单理解
来源:互联网 发布:淘宝不能下载 编辑:程序博客网 时间:2024/06/11 09:00
Android中有四大组件来构成Android程序,Intent是Android程序中三大组件(活动,广播,服务)之间传递消息的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景,这是Intent重要的几个用途。总体来说,Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。
Intent大致可以分为两种类型:显式Intent和隐式Intent。
显式Intent:
如果在我们定义的Intent中明确包含了要启动的组件的完整类名(包名及类名),即Intent的“意图”非常明显,那么这个Intent就是显式的。使用显式Intent最典型的情形是在你自己的程序中启动一个组件,因为你自己肯定知道自己的要启动的组件的类名。比如,为了响应用户操作通过显式的Intent在你的程序中启动一个Activity或启动一个Service下载文件。
隐式Intent:
没有明确指定组件名要启动哪一个活动,而是系统根据动作(action)、类别(category)、数据(Uri)和数据类型来找到最合适的组件。一般来说我们需要在<intent-filter>里设置category、action和data等信息。需要注意的是,为了确保App的安全性,我们应该总是使用显式Intent去启动Service并且不要为该Service设置任何的Intent Filter。通过隐式的Intent启动Service是有风险的,因为你不确定最终哪个App中的哪个Service会启动起来以响应你的隐式Intent,更悲催的是,由于Service没有UI的在后台运行,所以用户也不知道哪个Service运行了
Intent Filter,即Intent过滤器,一个组件可以包含0个或多个Intent Filter。Intent Filter是写在App的manifest文件中的,其通过设置action或uri数据类型等指明了组件能够处理接收的Intent的类型。对于Android的主活动都有下面几行代码来表明启动活动:
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
例子:对于隐式Intent的具体方法:
在AndroidManifest.xml中定义相应的activity代码:
<activity
android:name=".ThreeActivity"
>
<intent-filter>
<actionandroid:name="android.intent.action.VIEW"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
<dataandroid:scheme="http"/>
</intent-filter>
</activity>
其中<action>标签指明了当前活动可以响应的action。<category>标签则附加了一些信息,更精确地指明了当前活动能响应的Intent还可能带有的category。只有<action>和<category>同时匹配上Intent中指定的action和category时,活动才能响应该Intent。
<data>标签能够更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置一下内容:
android:scheme。用于指定数据的协议部分,如http
android:host。用于指定数据的主机名部分
android:port。用于指定数据的端口部分,一般在主机名之后
android:path。用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定
只用当<data>标签中指定的内容和Intent中携带的data部分完全一致时,当前活动才能够响应intent。
Intent intent=new Intent("android.intent.action.VIEW");
intent.addCategory("com.example.as_menu.MY_CATEGORY");
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
Intent传输数据:
批量传参
Intent intent = newIntent();
Bundle bundle = newBundle();
bundle.putString("name","NSU");
intent.putExtra("bundle",bundle);
intent.putExtras(bundle);
逐个传参
Intent intent = newIntent();
intent.putExtra("name", "NSU");
intent.putExtra("age", 10);
Intent接收数据:
批量接收
Bundle bundle =getIntent().getBundleExtra("bundle");
String name =bundle.getString("name");
int age =bundle.getInt("age");
Bundle bundle =getIntent.getExtras();
逐个接收
Intent intent =getIntent();
String name =intent.getStringExtra("name");
int age =intent.getIntExtra("age");
- Android之Intent简单理解
- Android之Intent用途理解
- Android开发之深入理解Intent
- 关于android.intent.action.MAIN和android.intent.category.LAUNCHER的简单理解
- android intent的理解
- 【Android】Intent理解
- Android-Intent简单学习
- android学习之intent跳转二简单消息回传
- Android初级学习之Intent的简单使用
- 笔记40 | Android通讯之Intent的简单使用
- 【Android】Android之intent
- Android之intent
- Android之intent
- Android之Intent&BroadcastReceiver
- Android 基础知识之Intent
- Android之Intent详解
- Android之Intent
- android组件之Intent
- 58 Length of Last Word
- 计算广告——广告定向实践
- 前端JSer装逼手册
- 深度学习入门
- GC日志分析
- Android之Intent简单理解
- 操作调用父页面其他iframe标签
- <NOIP> 15 . P1427 小鱼的数字游戏
- Android 状态栏沉浸式
- 欢迎使用CSDN-markdown编辑器
- django 1.11设置
- STL源码剖析读书笔记7
- 函数式编程扫盲篇
- ReentrantReadWriteLock