Android四大组件之Intent
Posted 离氺的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android四大组件之Intent相关的知识,希望对你有一定的参考价值。
Intent可以用来启动Activity,Service以及Broadcaster。启动activity主要有两种方法:startActivity(Intent intent);(常规启动)和startActivityForResult(Intent intent,int requestCode);(回调启动,后者为识别符 详情参见其他文档);Intent封装了Component、Action、Category、Data、Type、Extra和Flag共七个属性。
Component的属性需要接受一个ComponentName对象,包含有三个构造器。 ComponentName(Context context,String cls)、(String pkg,String cls)、(Context context,Class<?>cls),主要作用是创建一个ComponentName 需要制定包名和类名---这样就可以唯一的确定一个组件类,这样应用程序可以根据制定的组件去启动特定的组件。
Action 只是完成一个抽象的动作,具体由做什么、谁来完成,这个Action不管,动作的执行以及执行者这个主要取决于组件的<Intent-filter----/>配置,只要组件里面包含了这个Action,组件就有可能被启动来执行Action。
例如:private final static string Action = "com.jing.GETDATE"; 这个这样创建Intent: Intent intent = new Intent() intent.setAction(intent); startActivity(intent); 执行startActivity后 程序就在manifest.xml里去找,若某个组件的<Intent-filter/>含有这个Action 这个组件就偶遇可能被启动 执行。 <Intent-filter/> 里可以包含N个Action子元素 ,N个Category子元素和一个data元素。 前二者的配置方法比较简单 都可以指定android:name ;例如:<action android:name = "com.jing.GETDATE"/>
注;一个Activity最多可有一个Action 调用方法如上;N个category 调用方法为intent.addCategory(String str);
Category主要是与Action配合,当Action被执行时 Category也同时起作用。
Data 通常用于向Action提供操作的数据 接受一个Uri对象。
例如: String data = "http://www.baidu.com"; intent.setAction(Intent.ACTION_VIEW); //显示 intent.setData(Uri.parse(data)); startActivity(intent); 这几行话的作用是显示百度首页页面;
Type Extra及Flag待完善 截止时间为2013 12 17。
Type 指定intent打开的数据类型,可自定义也可使用系统定义的 如: "image/*" 此类型表示图片 "application/pdf" 此为pdf "audio/*" 音频文件
Extra 附件 当想通过intent传递数据时可用intent.putExtre(key,vaule); 一般也可与Bundle配对使用
Flags android的启动模式有四种 有:standard、singleTop、singleTask以及singleInstance。设置位置在manifest中Activity元素的android:launchMode
standard 默认模式 不需要在manifest中配置 假如Activity A启动自己,则 启动时A1→A2→A3,则返回A3→A2→A1
singleTop 模式 singleTop要求如果创建 intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例,重复上面的动作,会发现 启动时A→A→A,返回时 直接退出了 。因为该Activity已经处在堆顶,因此不会创建新的实例。这个可以解决栈顶多个相同重复Activity的问题,若不是同一个Activity 其与standard就一样了。如A1→B1→A1,返回时A1→B1→A1。
此两种启动模式都会发送新的实例。
singleTask 和singleInstance一样都只创建一个实例,当intent到来,需要创建singleTask模式的Activity时,系统会检查栈里是否有该Activity的实例,若有 直接把intent发给他,否则 new
例如A1→B1→A1,退出时A1→B1→退出系统,因为在启动的第二步 相当于在栈里A1与B1换了一个位置(由B1在栈顶换成A1在栈顶);
flags一般与android启动模式一起使用。
//如果activity在task存在,拿到最顶端,不会启动新的Activity
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
//如果activity在task存在,将Activity之上的所有Activity结束掉
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//默认的跳转类型,将Activity放到一个新的Task中
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果Activity已经运行到了Task,再次跳转不会在运行这个Activity
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);intent七大属性已Over 2013 12 16
以上是关于Android四大组件之Intent的主要内容,如果未能解决你的问题,请参考以下文章