Android四大组件之Intent

来源:互联网 发布:cf手游官网体验数据 编辑:程序博客网 时间:2024/04/27 20:22
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

   





0 0
原创粉丝点击