Intent的Component属性需要接受一个ComponentName对象,ComponentName对象包含如下几个结构器:

  • ComponentName(String pkg,String cls)
    创建pkg所在包下的cls类所对应的组件。

  • ComponentName(Context pkg,String cls)
    创建pkg所对应的包下的cls类所对应的组件。

  • ComponentName(Context pkg,Class< ? > cls)
    创建pkg所对应的包下的cls类所对应的组件。

上面构造器的本质就是一个,这说明创建一个ComponentName需要制定包名和类名——这就可唯一地确定一个组件类,这样应用程序即可根据给定的组件类去启动特定的组件。

除此之外,Intent还包含了如下三个方法:

  • setClass(Context packageContext,Class< ? > cls):
    设置Intent将要启动的组件对应的类。
  • setClassName(Context packageContext,String className):
    设置Intent将要启动的组件对应的类。
  • setClassName(String packageName,String className):
    设置Intent将要启动的组件对应的类。

Android应用的Context代表了访问该应用环境信息的接口,而Android应用的包名则作为应用的唯一标识,因此Android应用的Context对象与该应用的包名有一一对应的关系。上面三个setClass()方法就是指定了包名(分别通过Context指定或String指定)和组件的实现类(分别通过Class指定或String指定)。

指定了Component属性的Intent已经明确了它将要启动哪个组件,因此这种Intent也被称为显式Intent,没有指定Component属性的Intent被称为隐式Intent——隐式Intent没有明确指定要启动哪个组件,应用将根据Intent指定的规则去启动符合条件的组件,但具体是哪个组件则不确定。

页面跳转的代码已经熟的可以盲打了:

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);

实际上,这是Intent提供的一个简化的显式构造器,它是由以下演变而来:

ComponentName comp = new ComponentName(MainActivity.this,SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(comp);
startActivity(intent);

当程序通过Intent的Component属性(明确了启动哪个组件)启动特定组件时,被启动组件几乎不需要使用< intent-filter …/>元素进行配置。

获取当前Activity对应的Intent的Component属性的包名、类名:

ComponentName componentName = getIntent().getComponent();
componentName.getPackageName();
componentName.getClassName();

Component属性相关推荐

  1. Angular set函数和Component属性的命名冲突问题

    set函数和Component属性名称不能重复,可以把Component属性加上下划线,暗示其是私有属性,然后通过公有的set来管理. 更多Jerry的原创文章,尽在:"汪子熙":

  2. React router 的 Route 中 component 和 render 属性理解

    React router 的 Route 中 component 和 render 属性理解 Route 标签的三个互斥属性 render.component.children Route 就是用来匹 ...

  3. 为 protocol 中属性添加默认值

    首先放个简单的Playground做下示范. 普通 protocol 中的 get set protocol中属性可以声明为{ get }或者{ get set }.大多数人第一眼肯定觉得{ get ...

  4. 8Cocos Creator组件开发cc.Component

    1.组件简介 组件是Cocos Creator的主要构成,渲染(场景显示内容).逻辑.用户输入反馈.计时器等等几个方面都是由组件完成的.根据Cocos Creator的总体架构,组件和节点配合完成游戏 ...

  5. 使用 Rxjs 解决 Angular Component 之间的通信问题

    本文讨论如果两个 Angular Component 彼此不知道对方的存在,并且也没有共享的父子 Component 时,如何进行通信. 在包括 Angular 在内的许多前端框架中,当我们将应用程序 ...

  6. Angular 事件绑定语法在 SAP Spartacus Popover Component 中的一个应用

    要绑定到事件,请使用 Angular 的事件绑定语法.此语法由等号左侧括号内的目标事件名和右侧引号内的模板语句组成.在下面的示例中,目标事件名是 click ,模板语句是 onSave() . < ...

  7. Angular应用从Component到Html的数据绑定是如何实现的 -数据流的讨论

    index.html里有个base标签页,href属性为/: getBaseElementHref: getBaseHref: relativePath里有个document.createElemen ...

  8. cocos creator基础-(五)cc.Component使用

    一.组件入口函数 1: onLoad: 组件加载的时候调用, 保证了你可以获取到场景中的其他节点,以及节点关联的资源数据 2: start: 也就是第一次执行 update 之前触发 3: updat ...

  9. quasar使用keep alive警告 Component inside <Transition> renders non-element root node

    问题描述 提示:这里描述具体问题:在项目中使用缓存来保持页面不被更新,但是在使用keep-alive时会给出警告.vue3缓存与vue2缓存不一样,需要注意.下面是代码. <router-vie ...

最新文章

  1. ubuntu 查看显卡_Pop!_OS 与 Ubuntu:哪个更棒?
  2. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
  3. java switch null_[改善Java代码]小心switch带来的空值异常
  4. 从URL中获取搜索关键字
  5. 一款免费好用的代码在线比较工具
  6. approxPolyDP函数
  7. 2025 : 简单环路(并查集)
  8. Python高级特性:迭代器和生成器
  9. Reflection in .net
  10. 基于CentOS7配置ArcGIS enterprise
  11. python制作自动交易软件-Python语言之一位程序员写了一个自动化交易程序,躺着玩,两年就挣了两百万!...
  12. 计算机和未来汽车有联系吗,汽车的未来是会奔跑的计算机?
  13. 图片怎么压缩成指定大小?怎么能把图片压缩到200k?
  14. (封装调用) layui table中checkbox 付款框 跨页保存选中赋值状态 跨页记忆选择
  15. 谷歌等提出Soft Diffusion:从通用扩散过程中正确调度、学习和采样
  16. Ubuntu 22.04 LTS 是史诗级的版本?
  17. 关于服务器基本概念汇总
  18. redis mysql 原子计数器_Redis原子计数器incr
  19. java程序运行机制
  20. 如何给模型加入先验知识?

热门文章

  1. 5G NR—— RRC_INACTIVE状态
  2. 个人能用的短信平台有哪些?看这一篇就够了
  3. Implement strStr() -- LeetCode
  4. C++STL accumulate函数
  5. Alpine介绍与apk的基本使用
  6. 【ChatGPT4】王老师零基础《NLP》(自然语言处理)第二课
  7. Annex-B和AVCC
  8. ListT的各种排序方法
  9. Python真香之爬取古诗文网
  10. mysql错误42000_mysql5.7 异常ERROR 1055 (42000)