Activity之Intent隐式启动PK显示启动
2016-01-16 11:22
615 查看
一、标题中所说启动其实是跳转到下一个Activity方式。
严格意义上的启动指的是startActivity(intent),或者带值返回startActivityForResult(intent)。本文就Activity的两种跳转方式具体写法、特点及用法(使用场合)做一下比较:
二、先记下结论:即使用场合
1、任何一个Activity的启动,我们都可以有两种方式(显式和隐式)
2、显式启动:用于启动同一个应用中的Activity,效率高
3、隐式启动:用于启动不同应用中的Activity。
三、写法:
1、Intent
Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。Intent七大属性:由以下各个组成部分:
component(组件):目的组件
action(动作):用来表现意图的行动
category(类别):用来表现动作的类别
data(数据):表示与动作要操纵的数据
type(数据类型):对于data范例的描写
extras(扩展信息):扩展信息
Flags(标志位):期望这个意图的运行模式
有关七大属性讲解详见《Intent七大属性》官方建议使用隐式Intent。七大属性中,除了component属性为显式,其他均为隐式。
2、隐式启动:
相比于显式Intent,隐式Intnet则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。清单文件中要为Activity注册
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.sina.intent01.MY_ACTION"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Activity 中 Intent Filter 的匹配过程 :
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri data=Uri.parse("http://www.baidu.com"); intent.setData(data); startActivity(intent); } });
如果有多个组件被匹配成功,就会以对话框列表的方式让用户进行选择。
每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确
在Intent添加类别可以添加多个类别,那就要求被匹配的组件必须同时满足这多个类别,才能匹配成功。操作Activity的时候,如果没有类别,须加上默认类别
当Intent匹配成功的组件有多个时,显示优先级高的组件,如果优先级相同,显示列表让用户自己选择
优先级从-1000至1000,并且其中一个必须为负的才有效
注:系统默认的浏览器并没有做出优先级声明,其优先级默认为正数。
3、显式启动;
Intent intent = new Intent(); //setClass方法的第一个参数是一个Context对象 //Context是一个类,Activity是Context类的子类,也就是说,所有的Activity对象,都可以向上转型为Context对象 //setClass函数的第二个参数是一个Class对象,在当前场景下,应该传入需要被启动的Activity类的class对象,不同包时,写类名的时候必须带上包名,否则找不到。 intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); //或者更简单的写法,通过带参构造函数直接传值 Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivity(intent);
三、特点
显式启动:直接指定要跳转的Activity类名,不用过滤,效率高,适用于同一个应用中的不同Activity跳转
隐式启动:需要过滤,相对耗时,但可以找到所有之匹配的应用。适用于不同应用之间的Activity跳转。
相关文章推荐
- oracle中根据当前记录查询前一条和后一条记录
- 基于Socket的UDP和TCP编程介绍
- 使用HttpClient发送https请求GET方式
- 路由器上再接一个无线路由器-wifi-转
- 远程登录管理工具SecureCRT连接VMWare下的CentOS
- JVM学习笔记(五)--- 基本垃圾回收算法
- Golang初级系列教程-多重继承
- 可视化——matploblib常见api(三)
- TCP、UDP绑定同一端口通信的解释-转
- 212,三种加载view的方法
- 利用yii2admin划分前后台
- 前缀和问题
- 关于新版VLC无法看RTSP的视频的问题-转
- linu计划任务学习
- [数据挖掘]离群点检测---基于kNN的离群点检测、LOF算法和CLOF算法
- JAVA生成条码(jbarcode)
- CUDA基础知识(2)
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
- 仿底部工具栏上滑消失下滑出现
- 从无到有:微信后台系统的演进之路