`

Intent

阅读更多
     Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。
我们可以以两种形式来使用Intent:
1.直接Intent:
  a.指定了component属性的Intent:
  // 前名一个参数是应用程序的包名,后一个是这个应用程序的主Activity名  
 
intent.setComponent(new ComponentName("com.test", "com.test.MailActivity"));

  b.使用setClass:
   // 从哪跳到哪(相当与内部转发)
  
intent.setClass(TestActivity.this, MailActivity.class);

2.间接Intent:利用AndroidMenifest.xml中的配置(哥也没做啥android的大系统,所以暂时也懒得管啥松耦合了,很少用 )
   没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。
   
 <intent-filter>
             //Action代表该Intent所要完成的一个抽象“动作”!
             <action android:value="com.test.MailActivity" />
             //Category则用于为Action增加额外的附加类别信息
             <category android:value="android.intent.category.DEFAULT" />
             //通常用于向Action属性提供操作的数据,接受Uri对象
             <data android:scheme="http" android:pathPattern=".*//.pdf"></data>  
             //用于明确指定Data属性所指定数据的类型或MIME类型,当Intent不指定Data属性时Type属性才会起作用,否则Android系统将会根据Data属性值来分析数据的类型,因此无需指定Type属性。
             <type android:value="vnd.android.cursor.dir/vnd.google.note"/>
     </intent-filter>
那么就可以在代码里面用生产的常量指定取哪一个Activity了。

Android内部提供了大量标准Action、Category常量,(转载为另外一篇文章)

     Intent的Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,Bundle对象就像一个Map对象,它可以存入多组key-value对,这样可以就可以通过Intent在不同Activity之间进行数据交换了。
    
     // 在intent里面设置值,传递
     intent.putExtra("userName", "xdc");
     intent.putExtra("passWord", "123");


     Intent的Flag属性:首先得说一下task和activity的关系了,他们关系就像是栈,task看作一个容器,activity填充这个容器,先放进去的那么就只有最后拿出来(在最底下),最后放进去的就在最上面,而Intent的Flag属性可以控制。在Activity跳转时用到Intent Flag可以设置新建activity的创建方式。
    如:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    FLAG启动的Activity会把要启动的Activity之上的Activity全部弹出栈空间。类如:原来栈中的情况是A,B,C,D这个时候从D中跳转到B,这个时候栈中的情况就是A,B了,B就在最上面。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics