安卓学习日记——Intent

  • 什么是Intent
    Android中提供了Intent机制来协助应用间的交互与通讯。不仅可用于应用程序之间,也可用于应用程序内部的activity,service和broadcast receiver之间的交互。
    在这里插入图片描述
  • Intent各个组成部件
    1、component(组件):目的组件
    2、Action(动作):用来表现意图的行动
    3、category(类别):用来表现动作的类别
    4、data(数据):表示与动作要操纵的数据
    5、type(数据类型):对于data范例的描写
    6、extras(扩展信息):扩展信息
    7、Flags(标志位):期望这个意图的运行模式

Intent分为直接Intent(直接指定组件的名称)和间接Intent

直接查找法(通过组件名称)

public void componentClick(View v){
	Intent intent=new Intent();
	ComponentName componentName=new ComponentName(this,Main2Activity.class);
	intent.setComponent(componentName);
}

间接查找法(使用action属性和category属性)

public void actionClick(View v){
        Intent intent=new Intent();
        intent.setAction("com.example.action.SEE");   //setAction(一个自定义的动作)
        intent.addCategory("com.example.category.SEECATEGORY");//匹配一个类别
        startActivity(intent);

    }

在这里插入图片描述
priority优先级正数为同一优先级,只对负数起作用。自定义动作后要定义一个category(类别)。
当两个优先级相同时,又用户做选择要使用哪个Activity
在这里插入图片描述

使用间接法(data属性与action属性配合使用)

 public void dataClick(View v){
        Intent intent=new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri data= Uri.parse("http://www.baidu.com");
        intent.setData(data);
        startActivity(intent);
    }

在这里插入图片描述
data与action组合使用是最常见的使用方法。
如果要同时使用data和type,必须使用一下方法,匹配时必须两者同时匹配才能通过

 intent.setDataAndType(data,"text/html");
  <data android:scheme="http" android:host="www.baidu.com" android:mimeType="text/html"></data>
  • 加载activity的四种模式

standard模式:默认模式,以这种模式加载必定会构造一个新的Activity实例放到目标Task的activity栈顶,不管当前task的栈顶是什么情况。

singleTop:这种模式与standard模式类似,区别在于加载activity会多个判断步骤。判断需要加载的新activity与当前task栈顶的activity是不是同一个,相同的话就不再构造新的activity,并调用这个activity的newInstance()方法,不相同就还是会构造新的activity放到栈顶。

singleTask:这种模式下,会创建一个新的task来加载这个activity,并且这个task中只允许存在一个Activity的一个实例(以后可以加载其他Activity的实例)。

singleInstance:这种模式下,会创建一个新的task并且这个task中只能存在一个需要加载的这个Activity实例,即除了这个activity之外,不允许其他activity。

可以在清单文件中activity的launchMode中设置该activity的加载模式

图解standard模式
在这里插入图片描述
在这里插入图片描述
点击一次ActivityA按钮,会重新创建一个ActivityA进入栈,点击ActivityB按钮会创建一个ActivityB进入栈,所以是不断的重新创建Activity。
图解singleTop模式
在这里插入图片描述
修改了Activity的launchMode为singleTop
当此时的Activity为ActivityB时,即栈顶为ActivityB,点击按钮不会创建一个新的ActivityB出来,但是,如果是一下情况
在这里插入图片描述
点击ActivityB按钮,不会去调用下面的B,而是重新创建一个ActivityB放入栈顶,如图
在这里插入图片描述
图解singleTask模式
在这里插入图片描述
修改ActivityB的launchMode为singleTask,当这种情况下,点击ActivityB按钮,发现栈内已经有ActivityB时,会把ActivityB之上的Activity清除出栈。
在这里插入图片描述
图解singleInstance模式
在这里插入图片描述
修改ActivityB的launchMode为singleInstance,此时点击ActivityB按钮是,会新建一个Task,如图,
在这里插入图片描述
此时显示的是ActivityB,点击ActivityA按钮后,会返回之前的task并创建一个ActivityA,过程如下
在这里插入图片描述
点击返回,会先返回任务栈里的所以Activity,再切换到ActivityB,再返回就退出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值