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的主要内容,如果未能解决你的问题,请参考以下文章

Android四大组件之Service

Android之四大组件六大布局五大存储 总结

Android安卓四大组件之广播

Android 四大组件之Service学习

Android零基础入门第78节:四大组件的纽带——Intent

android四大组件Activity