六、Intent和Activity详解

Activity Intent相关FLAG介绍 C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK 标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,并且和栈1的affinity不同,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。原来是A,B,C这个时候再C中以这个FLAG启动D的,D再启动E,这个时候栈中情况为A,B,C,E。 阅读详情

1. AndroidManifest文件中的几个细节

结论:

(1)一个应用程序可以创建多个桌面图标

(2)创建快捷图标的方法:

<intent-filter>
    // 应用程序的入口
    <action android:name="android.intent.action.MAIN" />
    // 启动器
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

(3)activity的label标签的值就它的界面的标题

(4)activity的label标签的值就它的桌面快捷图标的名称

(5)application中的label标签和activity中的label标签不是一个概念,application中的label表示应用程序的名称,activity中的label标签表示的是它的界面的名称。

action:动作 可以自定义,可以使用系统定义
category:类型
android.intent.category.LAUNCHER 启动器,DEFAULT 默认类型,一般都是使用这个默认类型,
android.intent.category.CAR_DOCK、android.intent.category.CAR_MODE 车载电脑使用的模式,android.intent.category.TV

2. 意图设置动作激活新的界面(重点)

Intent 意图:做一件事情的想法。吃饭,打人,喝茶

动作:action

数据:data

intent的作用:激活组件和携带参数。

跳转的步骤:

AndroidManifest.xml中的配置

<activity android:name=".Main2Activity">
   <intent-filter>
        <action android:name="android.intent.action.SECONDSHOW" />
        <data android:scheme="lile" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

第一个activity中

// 创建一个意图对象
Intent intent = new Intent();
// 目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
// 使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("lile://heihei"));

// 使用目标activity在配置文件配置的data的category
intent.addCategory("android.intent.category.DEFAULT");

// 开启一个activity,跳转到另一个activity的界面上
startActivity(intent);

在第二activity中得到第一个activity传过来的intent:

Intent intent = this.getIntent();
Uri uri = intent.getData();

3. 意图设计的目的

意图设计的目的:

(1)解耦,实现应用程序的高内聚、低耦合。保证应用程序之间能够相互独立运行,又能彼此相互调用。

(2)保证自己写代码能够重复使用。

(3)架构师:保证项目 多快好省的把项目做完。

4. 隐式意图和显式意图(重点)

4.1 隐式意图

开启activity的时候不需要直接指定activity的名称,通过指定一组动作和数据,让系统来找到这个特定的activity。

应用场景:

(1)让外部应用程序开启自己应用程序里面的activity;

(2)开启外部应用程序的activity;

代码:

// 创建一个意图对象
Intent intent = new Intent();
// 目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
// 使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("lile://game=天天酷跑"));  
intent.addCategory("android.intent.category.DEFAULT");

//开启一个activity,跳转到另一个activity的界面上
startActivity(intent);
4.2 显示意图:

开启activity的时候直接指定activity的名称;

应用场景:应用程序内部调用。

代码:

Intent intent = new Intent(this, SecondActivity.class);
// 封装数据
// intent.putExtra("name", "lile");
// intent.putExtra("age", 18);
Bundle b = new Bundle();
b.putString("name", "lile");
b.putInt("age", 18);
intent.putExtras(b);
startActivity(intent);

5. 意图传递数据(重点)

可以传递的数据类型:

(1)8大基本数据类型、数组;

(2)Bundle类似于map的数据结构;

(3)Parcelable 序列化到内存;

(4)Serializable 序列化到文件;

使用显示意图:

Intent intent = new Intent(this,SecondActivity.class);
// 封装数据
// intent.putExtra("name", "lile");
// intent.putExtra("age", 18);
Bundle b = new Bundle();
b.putString("name", "lile");
b.putInt("age", 17);
intent.putExtras(b);
startActivity(intent);

使用隐式意图:

// 创建一个意图对象
Intent intent = new Intent();

intent.setAction(Intent.action.view);
intent.setData(Uri.parse("tel://"+123);  
intent.addCategory("android.intent.category.DEFAULT");

// 开启一个activity,跳转到另一个activity的界面上
startActivity(intent);

6. 开启activity获取返回值的步骤(重点)

步骤:

(1)在开启activity时调用

// 开启一个activity并等待返回结果
startActivityForResult(intent, 200);

(2)在目标activity中设置返回的数据

Intent intent = new Intent();
intent.putExtra("username", username);
// 设置界面关闭时返回数据
setResult(0, intent);

(3)关闭目标activity

// 自动关闭界面
finish();

(4)重写onActivityResult方法接收返回的数据:

7. 请求码和结果码的作用(重点)

使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据.

/**
 * requestCode 开启activity时设置的请求吗
 * resultCode 在目标activity中设置的结果码
 * data 第二个界面返回的数据
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
//      
//      if(resultCode==0){
//          String username = data.getStringExtra("username");
//          
//          Toast.makeText(this, username, 0).show();
//      }
//      
//      if(resultCode==1){
//          String thirdInfo = data.getStringExtra("thirdInfo");
//          
//          Toast.makeText(this, thirdInfo, 0).show();
//      }
//      
    // 使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据
    if(requestCode==200){
        String username = data.getStringExtra("username");

        Toast.makeText(this, username, 0).show();
    }

    if(requestCode==300){
        String thirdInfo = data.getStringExtra("thirdInfo");

        Toast.makeText(this, thirdInfo, 0).show();
    }
 }

8. activity的生命周期(重点)

(1)什么是生命周期:

如:被生下来、幼年、童年、青年、中年、老年

从被创建到销毁经历几个阶段,每个阶段就表示一个方法,这些方法就是生命周期的回调。

(2)activity的生命周期:

onCreate:在activity被创建的时候调用这个方法,初始化界面。
onStart:当界面可见的时候调用
onResume 按钮可以被点击的时候 

onPause 按钮失去焦点的时候:

onStop 界面不可见的时候调用:

onDestroy 销毁activity实例,做一些扫尾工作

1、activity创建时调用onCreate、onStart、onResume;
2、关闭activity时调用:onPause、onStop、onDestroy;
3、最小化activity时调用:onPause、onStop;
4、最小后重新打时调用:onRestart、onStart、onResume;

9. 横竖屏切换的生命周期(重点)

禁用横竖自适应的方式:

(1)screenOrientation:landspace横屏、 portrait竖屏、
横竖屏切换:先销毁当前的activity实例,再创建一个新activity实例。

(2)在activity中设置

android:configChanges="orientation|keyboardHidden|screenSize"

10. 任务栈的概念

队列:先进先出

栈:先进后出

任务:打开一个activity界面;

任务栈:

设计任务栈的目的:用来维护用户的体验,记录打开界面和关闭界面的信息。

(1)打开一个activity界面表示在栈中存放了一个任务,关闭一个界面表示清除了一个任务;

(2)栈里面的任务清除完毕后,应用程序退出;

11. singletop启动模式

singletop 单一顶部模式

在activity的配置文件中设置

android:launchMode="singleTop"

如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
应用场景:浏览器的书签

12. singletask和singleinstance启动模式

singetask 单一任务栈,在当前任务栈里面只能有一个实例存在

当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在

应用场景:浏览器的activity,如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码

singleInstance启动模式

activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在。如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance

应用场景: 来电页面 有道词典

Android 中Activity和Intent的详解 Activity的理解 Activity的运行状态分为 四种状态对应的生命周期流程图如下 Intent的理解如下 Intent的分类如下 IntentFilter的理解 Activity和Intent相关的API如下 Activity的Task Stack(任务栈) 特点:后进先出 Activity的LauchMode(加载模式) 具体详解看这篇文章 Android 中Activity的四种启动模式 应用实例进行打电话与发短信,隐示意图的练习,代码如下 1、布局页面activity_inte 阅读详情

相关推荐

植物叶绿体基因组分析全攻略:从共线性到密码子偏好性

本文全面解析植物叶绿体基因组分析流程,从共线性分析到密码子偏好性研究。详细介绍了叶绿体基因组结构特征、测序数据获取与质量控制、基因组组装与注释方法,以及比较基因组学和进化分析技术。特别关注IR区边界变异分析和选择压力评估,为植物系统发育研究和物种鉴定提供实用指南。

weixin_28475533的博客 222

Activity之Intent、生命周期、启动模式

1.Activity的理解 Activity 直译为活动,它是Android定义的四大应用组件之一,也是最重要用的最多的 Activity用来提供一个能让用户操作并与之交互的界面 一个应用有多个界面,也就是包含多个Activity(还存在单Activity+多Fragment 的) 打电话、发短信、拍照、发邮件等功能都是通过Activity来做的 2.Intent的理解 Intent 直...

追梦的鱼儿 1564

Unity游戏Mono注入实战:从反编译到功能扩展

本文详细介绍了Unity游戏Mono注入的完整实战流程,从使用dnSpy反编译游戏核心逻辑,到编写自定义C#功能DLL,再到利用SharpMonoInjector进行动态注入。文章深入讲解了如何通过Harmony库拦截修改游戏方法,并介绍了使用MelonLoader框架和UnityExplorer进行高级模组开发与调试,最终通过一个游戏对象透视(ESP)案例演示了功能扩展的实现。

weixin_29018335的博客 460

Activity和Intent

本文是有关Activity和Intent的学习笔记

qq_61942330的博客 446

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南

本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。

red88的博客 574

Activity和Intent的使用

一、Context 1、在开发Android应用过程中,经常会遇到调用方法时会第一个参数是Context类型。 2、Context 的中文翻译为:语境; 上下文; 背景; 环境,在开发中我们经常说称之为“上下文”。 3、在Android中,Context表示一种场景,代表与操作系统交互的过程。在Android开发中,启动Activity、获取系统服务、加载资源、View操作等往往都会传递一个Context参数。 4、在具体的代码实现上,Context是Android中的一个抽象类,包括Activit

qfguankefeng的博客 1288

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

如果我们在 n 维空间中绘制一个向量,看起来相似的物体(如狗和猫)将彼此靠近,而看起来不相似的物体(如学校和家庭)的嵌入向量将位于更远的地方。为此,我们将使用一种流行的标记器,称为 BPE 标记器,这是一种子词标记器,正在 GPT3 等模型中使用。:前馈网络使用深度神经网络来学习两个线性层(第一层有 d_model 节点,第二层有 d_ff 节点,根据注意力论文分配值)中嵌入向量的所有特征,并且将 ReLU 激活函数应用于第一线性层的输出,为嵌入值提供非线性,并应用 dropout 以进一步避免过度拟合。

sikh_0529的博客 1951

Android之Intent和Activity

Intent可以说是Android的灵魂,程序跳转和传递数据的时候基本上就是靠Intent了。Intent在Android应用中是相当重要的,理解Intent对应用编程很有帮助。在Android的官方API文档里边对Intent是这样定义的:An Intent is an abstract description of an operation to be performed。一个Intent就是

2403

从零到一:用AXI DataMover在Zynq MPSoC上实现高效DMA传输(附Vitis HLS驱动示例)

本文详细介绍了如何在Xilinx Zynq UltraScale+ MPSoC平台上使用AXI DataMover实现高效的DMA数据传输。通过解析AXI DataMover架构、Vivado工程配置、Vitis HLS驱动开发及性能优化技巧,帮助开发者快速构建高性能数据传输通道,并提供了可直接复用的代码示例。

weixin_42520796的博客 427

大模型辅助意图识别,更懂你的客户洞察平台

通过大量的学习和训练,大模型不仅具备庞大的知识库,更掌握着丰富的语言模式和语义规则,能够精准地理解每一段对话的含义,为每一通对话进行全面、准确的标注。主要来自客户的行为信息,将客户与机构的重要时刻以时间轴的方式呈现出来,掌握客户生命周期的完整脉络,识别一些容易被忽略的重要营销MOT(Moment Of Truth,关键时刻研究)机会,提示理财经理跟进处理。将客户的历史交易数据和埋点系统采集的客户行为数据结合起来,辅以部分内容资讯的偏好探测,综合分析和预测客户在各个维度的喜好程度,实现千人千面的客户推送。

Dezhuzhineng的博客 2161

Activity和Intent的关系

1.多个Activity之间的关系 Acticity 01------startActivity(Intent intent)------>Activity 02 2.Intent的基本作用(Intent还有其它作用,这里只讨论在Activity之间的作用) Intent是一个对象,有点像一个请求,包含了一组信息: 1)Componentname### 一个Activity想要启

superhill的学习笔记 3423

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 237

Activity launchmode和Intent flag详解

学习安卓,首先就要接触和学习Activity,想必大家在学习activity的过程中一定对activity的launchmode有过困惑。好在网络上关于activity launchmode的博客、解释一大堆,可以方便我们去理解和使用activity launchmode模式,但我强烈建议大家还是要自己动手实践做一些例子,这样才能真正理解activity的launchmode,而且经过实践后你会发现

泥土的博客 1486

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

5 Activity与Intent

5 Activity与Intent

DaB210的博客 1732

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

App应用程序开发实验六 Activity及Intent

如图1,点击按钮,进入图2界面,输入123456(自己的学号),点击按钮回到图1界面,输入的数据在图1显示,在底部编辑框输入asdf(自己的姓名拼音),点击按钮,进入如图3界面,显示图1输入的数据。答:startActivity( ) 仅仅是启动另一个Activity,他不会自定回转到原来的Activity,若是想跳回原来的页面,则必须再使用一次startActivity( )来启动原来的Activity。掌握Activity界面跳或切换的方法。

Annzz123的博客 1772

SAP B1中文培訓教材_SDK

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

使用 Intent 启动 Activity和Activity之间的数据传递

在Android 程序之中,Activity 对象时和用户交互的唯一手段,几乎每个 Android 项目程序都有多个 Activity。因此,灵活的在屏幕上切换 Activity 尤为重要。下面让我们一起来看一下如何用 Intent 来启动 Activity 对象吧首先,Intent 分为 显式 Intent 和隐式 Intent。显式 Intent 就是指定了要启动的 Activity 类,而隐式

指点 2492

Android Activity生命周期与Intent机制详解

Activity作为Android四大组件之一,是构建用户界面的核心单元。其生命周期管理机制通过onCreate、onStart、onResume等回调方法,确保界面状态与资源管理的正确性。Intent作为组件间通信的桥梁,支持显式和隐式两种调用方式,配合Intent Filter实现灵活的跨组件调用。在移动开发实践中,合理运用Activity启动模式和任务栈管理,能有效优化用户体验。通过ViewModel保存UI数据、正确处理配置变更等技巧,可以提升应用性能与稳定性。这些基础概念和技术广泛应用于电商、社交

weixin_34008805的博客 525

Activity(Intent-filter详解及跳转)

转载请注明出处:http://blog.youkuaiyun.com/huiblog/article/details/53221809五壮士之 Activity 开场白 为什么说是五壮士呢? Android知识体系中最重要的就是四大组件,也就是Activity、Service、ContentProvider以及BrocastRecever。还有一个重要的组件Application。所以,四大组价+Applic

灰太狼的博客 3487

详解显式intent和隐式intent

Intent是Android程序中各组件之间进行交互的一种重要方式。它不仅可以指明activity想要执行的动作,也可以在不同组件之间传输数据。 Intent分为两种,显式intent和隐式intent,以下分别进行描述: 一、显式intent bt.setOnClickListener(new View.OnClickListener() { @Overrid...

aries9986的博客 6739

Activity详解 Intent显式跳转和隐式跳转, 及多个Activity之间传值 总结

Activity 生命周期     显式 Intent 调用   1 //创建一个显式的 Intent 对象(方法一:在构造函数中指定) 2 Intent intent = new Intent(Intent_Demo1.this, Intent_Demo1_Result1.class); 3 4 Bundle bundle =

WILLIAM-HUAN 个人技术博客 1万+

Android中使用intent跳转Activity和传递数值

显示Intent与隐式intent的使用,以及利用intent传递数值

It_is_IT_的博客 2050
上一篇: 五、网络进阶
下一篇: 七、广播详解
CoderLiLe
博客等级 码龄11年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值