Android到底那个Acitivity启动

ABAP HANA BP主数据批导 SAPhana官方推荐的创建bp主数据的类是CL_MD_BP_MAINTAIN 客户的创建具体示例代码如下: DATA: LT_RETURN_MAP TYPE MDG_BS_BP_MSGMAP_T. DATA: LS_RETURN_MAP TYPE MDG_BS_BP_MSGMAP. DATA: LS_MESSAGE_MAP TYPE MDG_BS_BP_MSGMAP_KEY. DATA: LT_DATA TYPE CVIS_EI_EXTERN_. 阅读详情

启动那个Acitivity有两种方式:implicit(隐藏) intent 和 explicit(明确) intent

Explicit Intent

明确的指定了要启动的Acitivity 
比如以下Java代码,明确指定了要启动B: 
Intent intent= new Intent(this, B.class) 

 

Implicit Intent


没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。

当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。

 

Implicit Intent 到底发给哪个activity?

这需要进行三个匹配,一个是action,一个是category,一个是data。根据三个的匹配结果,找到应该启动的Activity。

 

Action Implicit Intent

动作匹配指Android Intent Filter包含特定的动作或没有指定的动作。

一个Intent Filter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个Intent Filter在算作是动作匹配检查失败。

<intent-filter>元素中可以包括子元素<action>,比如: 
<intent-filter> 
<action android:name=”com.example.project.SHOW_CURRENT” /> 
<action android:name=”com.example.project.SHOW_RECENT” /> 
<action android:name=”com.example.project.SHOW_PENDING” /> 
</intent-filter> 
一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通过了这条<intent-filter>的动作测试。

Category Implicit Intent

种类匹配更为严格。Intent Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配。

<intent-filter>元素可以包含<category>子元素,比如: 
<intent-filter . . . > 
<category android:name=”android.Intent.Category.DEFAULT” /> 
<category android:name=”android.Intent.Category.BROWSABLE” /> 
</intent-filter> 
只有当Intent请求中所有的Category与组件中某一个IntentFilter的<category>完全匹配时,才会让该Intent请求通过测试,IntentFilter中多余的<category>声明并不会导致匹配失败。

Data Implicit Intent

Intent的数据URI中的部分会与Intent Filter中的data标签比较。如果Intent Filter定义scheme,host/authority,path或mimetype,这些值都会与Intent的URI比较。任何不匹配都会导致Intent Filter从列表中删除。没有指定data值的Android Intent Filter会和所有的Intent数据匹配。

  • mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果Intent Filter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。
  • scheme是URI部分的协议——例如,http:,mailto:,tel:。
  • host-name或“data authority”是介于URI中scheme和path之间的部分(例如,www.google.com)。匹配主机名时,Intent Filter的scheme也必须通过匹配。
  • 数据path是紧接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情况下才匹配。

数据在<intent-filter>中的描述如下: 
<intent-filter . . . > 
<data android:type=”video/mpeg” android:scheme=”http” . . . /> 
<data android:type=”audio/mpeg” android:scheme=”http” . . . /> 
</intent-filter> 
<data>元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、authority和path。其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。

解析出来后的处理逻辑

如果这个过程中多于一个组件解析出来的话,它们会以优先度来排序,可以在Android Intent Filter的节点里添加一个可选的标签。最高等级的组件会返回。

Android本地的应用程序组件和第三方应用程序一样,都是Intent解析过程中的一部分。它们没有更高的优先度,可以被新的Activity完全的代替,这些新的Activity宣告自己的Intent Filter能响应相同的动作请求。

 

 

应用程序的启动

AndroidManifest.xml 文件中,把那个 activity 配置了 <action android:name="android.intent.action.MAIN" /> ,那就就是最先被启动的 Activity ,如果多个设置了,则第一个设置的是最新被启动的 Activity。

如下图设置,是 .SplashActivity 先启动的


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="ghj1976.HelloWorld" android:versionCode="1"
	android:versionName="1.0">
	<uses-sdk android:minSdkVersion="3" />
	<application android:icon="@drawable/icon" android:label="@string/app_name">
		<activity android:name=".HelloWorldActivity" android:label="@string/app_name">
		</activity>
		<activity android:name=".SplashActivity" android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
	</application>
</manifest>

上面代码中的

activity android:name:  activity 的类名,必须有。

android.intent.action.MAIN   决定应用程序最先启动的Activity

android.intent.category.LAUNCHER     决定应用程序是否显示在程序列表里

 

参考资料

Intent Filter匹配

http://www.moandroid.com/?p=1651

什么时候加上android.intent.category.DEFAULT和LAUNCHER

http://www.crazydevelop.com/content.aspx?ID=6416

Android 开发之:Intent.createChooser() 妙用

http://www.oschina.net/bbs/thread/9299


【现代人形机器人:从物理建模到大模型驱动的控制与学习】第1章 机器人建模回顾 本章建立读者进行后续控制 / 优化 / 学习工作的数学与计算基础。内容分为三大块:刚体运动学:位姿表示、坐标变换、旋转参数与李代数/李群(指数映射、twist)多关节机构的正/逆运动学:DH 与 POE 两种建模、雅可比矩阵推导、数值/解析逆解方法与奇异性问题约束动力学:拉格朗日公式、牛顿—欧拉递归算法、接触/冲击模型、受约束系统的方程(拉格朗日乘子与互补性条件)每一节同时给出与练习题。假设读者已具备线性代数(矩阵、特征分解、SVD)、多变量微积分与基础力学(牛顿第二定律)知识。 阅读详情

相关推荐

Android车载桌面开发实战:从CarLauncher源码解析到自定义Launcher开发(Android 11)

本文深入解析了Android 11中CarLauncher的源码架构与核心模块,并提供了从零开始定制开发车载Launcher的完整实战指南。内容涵盖车载桌面的独特定位、驾驶场景优化、多屏协同、动态内容嵌入等核心挑战,以及如何构建符合安全规范、体验流畅的自定义车载桌面应用,是车载应用开发者提升系统级定制能力的实用参考。

weixin_29266647的博客 515

Android理解:显式和隐式Intent

Intent是Android初学者比较难理解的一个东西。我这里以通俗易懂的语言和通俗易懂的代码,让初学者简单感受一下Intent。intent就是意图的意思。Intent分两种:显式(Explicit intent)和隐式(Implicit intent)。 一、显式(设置Component) 显式,即直接指定需要打开的activity对应的类。 以下多种方式都是一样的,实际上都是设置C...

移动编程 683

从实验室到晶圆厂:一文看懂二维半导体(如MoS2)的CVD生长与晶体管制造挑战

本文深入探讨了二维半导体(如MoS2)从实验室研究到晶圆厂量产的CVD生长与晶体管制造关键技术挑战。重点分析了晶圆级二维半导体的CVD生长工艺优化、晶体管制造的四大界面工程难题,以及掺杂与集成的产业化解决方案,为二维半导体在集成电路领域的应用提供技术参考。

weixin_42651748的博客 471

Implicit Intent--含蓄的intent

通过intent调用打电话,打开地图、打开浏览器,创建邮件,创建事件的操作 截图: 代码 package com.example.hellointent; import java.util.Calendar; import java.util.List; import org.apache.http.protocol.HTTP; import android.net.Uri;

zhi07的专栏 1124

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3390

逆向工程的艺术:如何绕过PDD的长连接机制实现高效抓包

本文深入解析了如何通过逆向工程技术绕过拼多多(PDD)的长连接机制实现高效抓包。详细介绍了动态调试方案、关键函数Hook技巧及流量解密重组方法,帮助开发者在非Root环境下捕获并解析PDD的加密数据。结合Python工具链,实现稳定数据采集,适用于电商数据分析和反爬策略研究。

weixin_29058331的博客 674

隐式意图 implicit intent

在我们的APP中用于与其他APP交互 implicit intent 在声明时并不需要指定跳转的activity的名称,而是声明一个要执行的动作action,action中可以携带数据,也可以不携带,根据需求而定 比如说,当我们需要在我们的APP中呼叫某一个电话 package net.oschina.git.zhaikun.androiddeveloped.activitys; imp...

一个IT人的技术成长历程。 1472

电池管理系统(BMS)系列(四)—数据采集之温度

属于BMS系列文章,介绍了电池包温度采集相关方式

zxx52113140的博客 5456

Android 12 行为变更:适配以Android 12为目标的应用

*其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。这么重要的事情说三遍啦!

2401_83703835的博客 984

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2868

C#winform自定义绘制曲线控件实例

本文实例讲解自定义绘制曲线控件过程。 在实际项目中,需要绘制曲线,系统的提供的绘制曲线的控件有时不能满足自己的需要,需要根据项目需要定制开发曲线控件。 实例目标,实时绘制显示温湿度值曲线。

qq_30725967的博客 1734

Android Acitivity启动模式

Activity启动模式对于我们很多应用中会有不同的要求,这儿简单说一下Activity的四种启动模式之间的差别 1.standard默认启动模式,如果不在AndroidMainfest文件中配置,默认为这个模式。 这种模式下,每次启动这个Activity都会调onCreate方法创建新的实例。 示例代码: public class MainActivity extends

风哲的博客 509

python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析

本文是一篇Python入门教程,主要介绍PyCharm编辑器的安装配置和基础使用,以及Python输入输出语法的实操练习。文章分为四个部分:1)PyCharm的下载安装与基础配置;2)第一个Python程序"Hello World"的编写与运行;3)Python输入输出函数print()和input()的详细讲解;4)个人信息录入系统的实战案例。教程包含大量截图和动图演示,适合Python新手跟随操作,快速掌握编辑器使用和基础语法。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4009

Android到底哪个Acitivity启动

http://ghj1976.wordpress.com/2011/04/29/android%E5%88%B0%E5%BA%95%E9%82%A3%E4%B8%AAacitivity%E5%90%AF%E5%8A%A8/ Android到底那个Acitivity启动 Posted on 04月 29, 2011by ghj1976 启动那个Acitivity

突围 919

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android中Acitivity的启动方式启动模式讲解

一、 activity的启动方式分为两种显示启动和隐式启动 1、显示启动方式: A:最常见的 MainActivity是当前的activity类,TargetActivity类是需要跳转到的类 startActivity(new Intent(MainActivity.this,TargetActivity.class)); B:通过Intent的ComponentName ComponentName cn = new ComponentName("MainActivity的全类名","T.

硅谷海盗的博客 1118

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android 是怎么启动一个Acitivity的?

可以把启动过程分为client端和server端。 一、client端在启动一个Activity时进行的工作 备注:我个人理解,client端指的是相对后台ActivityManagerService 进程来说的前台用户可见的进程,如在界面启动某一个Activity的就是Laucher进程。这里则以从home桌面启动一个Activity来分析启动过程: (1)Launcher 这个进程的

SnailDream 2025

Android活动Acitivity启动模式之singleTask

前面的文章介绍了Android 活动Activity的启动模式:standard

残缺的孤独 2528

Android复习-Acitivity的启动模式

所谓启动模式就是配置文件中的这个属性: <activity android:name=".Main3Activity" android:launchMode="standard"> launchMode属性用来标识Activity的启动模式,不行的话默认为standard。一共有四种: 在介绍这四种模式之前首先的明确一个任务栈的概念,

Ade-rui的博客 473

Android 系统和Acitivity启动流程

在Android中,所有的应用程序进程与系统服务进程(SystemServer)都是有Zygote进程孕育出来的。当ActivityManagerService启动一个应用程序时,就会通过Socket与Zygote进程进行通信,请求它孕育出一个子进程来作为即将要启动的应用程序的进程。在系统中有两个重要服务:PackageManagerService和ActivityManagerService,都...

幸福的小飞猪 270

Android活动Acitivity启动模式之singleTop

在文章Android活动Acitivity启动模式之standard中,介绍了活动的默认启动模式standard

残缺的孤独 1万+

Android网页中启动Acitivity

原文详细介绍 http://blog.youkuaiyun.com/caroline_wendy/article/details/50297671 人们每天都要访问大量的手机网页, 如果把手机网页(Web)和应用(App)紧密地联系起来, 就可以增大用户的访问量, 也有其他应用场景, 如网页中调用支付链接,新闻中启动问诊界面, 提供优质的原生功能等等. 如何在网页(Web)中, 通过Inten

欢迎加入Android老司机学院 482266514(技术交流群)密码优快云 900

Android活动Acitivity启动模式之singleInstance

前面文章介绍了

残缺的孤独 1529

Android活动Acitivity启动模式之standard

Android的活动是通过任务Task来进行管理的,

残缺的孤独 2629
上一篇: Android中BindService方式使用的理解
下一篇: Android AIDL远程服务使用示例
whatsyourname
博客等级 码龄23年 13粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值