android基础学习之implicit Intent,explicit Intent

本文介绍了Android中的Intent使用,包括显示意图(Explicit intent)和隐示意图(Implicit intent)。显示意图用于明确指定要启动的Activity,可以传递数据且能跨进程,但通常不建议直接调用其他App的Activity。隐示意图则根据action、category和data来匹配合适的Activity,可能需要用户选择。注意点包括:隐示意图即便目标App不在后台也能启动,必须指定category以避免匹配不到Activity,以及通过intent.resolveActivity(getPackageManager())判断是否能启动Activity以防止异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Explicit intent 显示意图:

不传数据 

startActivity(new Intent(this,EastActivity.class));

传数据 

intent.putExtra(key,value)  //以键值对的形式放入bundle集合中 
@src Bunlde( A mapping from String keys to various {@link Parcelable} values.)

当然显示意图也是可以跨进程掉起别的app的activity,前提是你所调起的三方activity是需要暴露给外部应用的,即在AndroidManifest设置属性exported = "true",或者添加intent-filter<这个会默认开启exported的>,如果当期activity所在app没有存活,会开启新的进程。但是一般没人这么做,因为你暴露了别人的包名等相关隐私,再说,也没有人愿意给你。。。而且这样调起来,你会发现如果掉起三方app没有相关activity,这样的异常你只能去try catch了。

 Intent intent = new Intent();
        try {
            //找不到会抛ActivtyNotFoundException
            intent.setClassName("com.example.lx.listfragment", "com.example.lx.listfragment.WestsActivity");
            // intent.setComponent(new ComponentName("com.example.lx.listfragment", "com.example.lx.listfragment.WestActivity"));
            intent.putExtra("data", "I am comming from Explicit");
            startActivity(intent);
        }catch (ActivityNotFoundException e){
            e.printStackTrace();
        }


好了,成功了。

Implicit intent 隐示意图:

不指定activity的具体类名,通过action,category,data去筛选合适的activity去匹配,当然也可能会匹配到不止一个组件,满足当前intent筛选的条件这时候系统会弹出一个对话框让用户自己去选择。然后就是,楼主觉得需要注意的地方有三点,也有可能是比较容易被忽略的。。。

1.即使三方app不在后台,当前app也是可以调起来三方相关app组件的。

2.因为startAactivity中intent都会默认的绑定了一个category,当然一个intent也可以指定多个category(多个action),所以通过隐示启动的话,对应app中的AndroidManifest中intent-filter得去指定一个category,不然就匹配不到了.

3.为了避免找不到需要匹配activity的情况会抛出ActivityNotFoundException的异常,一般都是会通过intent.resolveActivity(getPackageManager()) != null 进行判空处理。


有问题,欢迎指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值