Intent 译为 意图,用于android四大组件间的相互调用、传值。
activity之间的启动一般用法为
Intent intent=new Intent(FirActivity.this,SecActivity.class);
intent可通过put***("key",value);携带参数
通过StartActivity(intent);启动该intent;
目标页 通过 getIntent("key") 获取intent携带的对应参数。
Intent 有七大属性:1、Component Name,2、Action,3、category,4、data,5、Type,6、Extra,7、Flag。
(一)ComponentName
Intent intent =new Intent();
ComponentNamecomponent= new ComponentName(this, TwoActivity.class);
intent.setComponent(component);
等价于 Intent intent=new Intent();
intent.setClass(this,TwoActivity.class);
等价于 Intent intent=new Intent();
intent.setClassName(this,"com.kurt.demo.TwoActivity");
等价于 Intent intent=new Intent(this,TwoActivity.class);
(二)Action&category
1:如果intent中不定义action及category,intent可与任意<intent-filter>匹配;
2:如果<intent-filter>不定义action,则无法与任何配置有action的intent匹配;
3:<intent-filter>中的category完全包含intent配置的全部category,该intent才可生效。<intent-filte
r>中多余的category不影响intent。
4:intent请求中的action和<intent-filter>中的某一条action匹配,则匹配成功。
(三)data%type
源码中 setData 会把Type置为null,setType 会把Data置为null;如果需要同时设置data及type,可使用setDataAndType();
Data的参数是Uri;
Type表示要查找的文件类型,如{".3gp", "video/3gpp"},
(四) Extra
通过intent.putExtra(键, 值)的形式在多个Activity之间进行数据交换。
(五)Flags
Intent 可调用addFlags()方法来为Intent 添加控制标记。
1 、FLAG_ ACTIVITY_CLEAR_TOP:(效果同Activity LaunchMode的singleTask)
如果在栈中已经有该Activity的实例,就重用该实例。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
2 、FLAG_ACTIVITY_SINGLE_TOP:(效果同Activity L aunchMode的singleTop)
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,而不会创建新的Activity 对象。
3 、FLAG_ ACTIVITY_NEW_TASK:
示例代码:
Intent intent = new Intent(this,SecActivity.class);
//将Activity栈中处于MainActivity主页面之上的Activity都弹出。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);