《Android开发艺术探索》读书笔记-第一章 Activity的生命周期和启动模式

Android Activity的生命周期和启动模式 参考:《Android开发艺术探索》 1. Activity 的正常生命周期 完整的activity生命周期如下所示 生命周期的几点注意事项: Activity 第一次启动:onCreate->onStart->onResume。 Activity 切换到后台( 用户打开新的 Activity 或者切换到桌面) ,onPause->onStop(如果新 Activity 采用了透明主题,则当前 Activity 不会回调 onstop)。 Activity 从后台到前台,重新可见,o 阅读详情

Android开发艺术探索-读书笔记

第一章 Activity的生命周期和启动模式

1.1.1典型情况下的生命周期分析

1)Activity的生命周期:
onCreate->onRestart->onStart->onResume->onPause->onStop->onDestroy
2)onStart:这时Activity已经可见了,但是还没有出现在前台
3)onResume:这时Activity已经可见了,并且出现在前台开始活动。(这时才真正可见)
4)Activity1—>Activity2,先执行完Activity1的onPause方法再执行Activity的onCreate->onStart->onResume方法,再执行Activity1的onStop方法。(Activity的启动流程源码中需要栈顶的Activity先执行完onPause后再执行跳转Activity的生命周期),所以在Activity的onPause方法中不能执行重量级操作,太耗时导致Activity跳转慢。
由此联想到Activity的生命周期和View的生命周期的关系,后面分析

1.1.2异常情况下的生命周期分析

1资源相关的系统配置发生改变导致Activity被杀死并重新构建(屏幕翻转)

1)当系统配置发生改变后,Activity会被销毁(可以阻止),其onPause、onStop、onDestroy均会被调用,由于是异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态,执行时机在onStop之前,但和onPause没有既定的时序关系,可能之前可能之后。需要强调的一点,这个方法只会出现在Activity被异常终止的情况下,正常情况下系统不会回调这个方法,当Activity被重新创建后,系统会调用onRestoreInstanceState,并把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数传给onRestoreInstanceState和onCreate方法。因此可以通过onRestoreInstanceState和onCreate方法中的Bundle对象判断Activity是否是被建。OnRestoreInstanceState调用在onStart之后。
2)系统默认会保存Activity的视图结构,在Activity重启时会恢复这些数据。具体某一个View保存了哪些数据可以查看View的onSaveInstanceState和onRestoreInstanceState方法源码。
3)保存和恢复View的层次结构,系统的流程是首先Activity调用onSaveInstanceState保存,然后Activity会委托Window去保存数据,Window在委托顶级容器保存数据。顶层容器是一个ViewGroup,再一一通知子元素保存数据。这里用到了委托的思想,后面学习设计模式。

2.如何系统配置发生改变后,Activity不被重新创建

1)在AndroidMenifest.xml中配置configChanges属性
2)常用属性
locale:设备的本地位置发生了的改变,一般指切换了系统语言。
orentation:屏幕方向发生了改变。
keyboardHIdden:键盘的可访问性发生了改变,比如用户调出了键盘。
3)这时系统不会调用onSaveInstanceState和onRestoreInstanceState,会调用onConfigurationChanged方法。

1.2 Activity的启动模式

1.2.1 Activity的LaunchMode

1)四种启动模式
standard:标准模式,每启动一个Activity都会创建一个Activity实例。
singleTop:栈顶复用
singleTask:栈内复用,可以通过TaskAffinity指定任务栈,如果没有该任务栈,则重新创建一个任务栈,再创建一个Activity实例;如果有该任务栈,则看该任务栈中是否有该Activity实例,有,则将其上面的Activity全部移出栈,将该Activity放到栈顶;没有,则创建一个Activity实例,放到栈顶。
singleInstance:单实例模式,Activity单独的位于一个栈中。
2)onNewIntent
复用的Activity会执行onNewIntent,不会执行onCreate,onStart方法,在onResume之前调用。例如ActivityA->ActivityA,则会执行onPause->onNewIntent->onResume
3)TaskAffinity
用于在AndroidMenifest.xml中配合singleTask指定启动栈的栈名。注意taskAffinity属性的值为字符串,且中间必须包含有包名分隔符“.”
4)两种方式来指定Activity的启动模式
1.通过在AndroidMenifest.xml中指定launchMode
2.通过在Intent中通过addFlags()来设置标志位
区别:首先优先级第二种高于第一种,当两种同时存在以第二种为准;第一种无法为Activity指定FLAG_ACTIVITY_CLEAR_TOP,第二种无法为Activity指定singleInstance。
5)TaskAffinity和allowTaskReparenting配合使用,用于应用间Activity的跳转复用。这里准备写个Demo
6)查看adb中Activity的命令:adb shell dumpsys activity

1.3 IntentFilter的匹配原则

1)隐式调用和显示调用
2)隐式调用,一个过滤列表中的action、category、data可以有多个,只有一个Intent同时匹配action类别、category类别、data类别才算完全匹配,只有完全匹配才可以成功启动目标Activity
3)一个Activity可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即科成功启动对应的Activity。
4)action的匹配原则:action是一个字符串,intent中的action和过滤规则中的任何一个相同则算匹配成功。intent中没有指定action则匹配失败。总结:action的匹配要求intent中的action存在且必须和过滤规则中的其中一个action相同。
5)category的匹配原则:如果没有,也可匹配成功,但需要在过滤规则中加上“android.intent.category.DEFAULT”,原因:系统在调用startActivity或者startActivityForResult中会默认给intent加上“android.intent.category.DEFAULT”这个category;如果有,不论几个,都必须是过滤规则中已经定义了的。
6)data的匹配规则:

<data 
android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeTyoe="string"
/>

scheme:URI的模式,比如http、file、content等,如果没有指定scheme,则整个URI的其他参数无效,URI也就无效。
Host:URI的主机名,比如www.baidu.com,如果没有指定scheme,则整个URI的其他参数无效,URI也就无效。
Port:URI中的端口号,需要前两个参数指定的时候才有效。
Path、pathPattern、pathPrefix表示路径信息。

需要调用setDataAndType方法设置data
过滤规则可以不写URI,默认值为content和file,所以intent需要在没指定URI的情况下设为content或者file.

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】 有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。 阅读详情

相关推荐

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 748

activity生命周期

目录 前言 原文概述: 典型情况下的生命周期: 生命周期方法详解 关于Activity生命周期的几个结论: 关于典型情况下生命周期的两个问题: 异常情况下的生命周期: 资源相关的系统配置发生改变导致Activity被杀死并重建 资源内存不足导致优先级低的activity被杀死 设置在系统某些资源发生改变的时候不重新创建activity Android资源配置改变对于ac...

TT的博客 670

HIDL概述

HIDL背景 Treble 是 Google Android 团队的一项重大项目,意在 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Android 7.x 及更早版本中没有正式的供应商接口,因此设备制造商必须更新大量 Android 代码才能将设备更新到新版 Android 系统: 图1 Treble ...

u013357557的专栏 2万+

Activity异常情况下的生命周期分析

在默认情况下,Activity不做特殊处理,当系统配置发生改变后,Activity就会被销毁并重新创建。当系统配置发生改变后,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,由于Activty是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。这个方法的调用时机是在onStop之前,和onPause没有既定

深红骑士的博客 334

Python爬取天天基金网历史数据

前言 最近开始学习基金????,感觉需要收集一些数据统计分析才靠谱????毕竟给A股交学费的感觉可不好受???? 网上有很多公开的数据,我这里选择的是天天基金网进行爬取 页面分析 接口我分析过了,有些验证不太好获取数据,所以直接从html提取 在天天基金网中随便选择一款基金,然后点击进入历史数据页面 容易定位出日增长率的css选择器 还有翻页按钮 程序编写 使用selenium打开chrome浏览器进行爬取,全代码如下 from selenium import webdriver from sel

JiajunBernoulli的博客 2950

从Gotham到Foundry:拆解Palantir三大产品线,看它如何用‘本体’统一企业数据与AI

本文深入解析Palantir的三大产品线Gotham、Foundry和Apollo,揭示其如何通过独特的'本体'架构实现企业数据与AI的无缝融合。从国防情报到商业决策,Palantir的产品架构展现了强大的数据整合与AI赋能能力,为企业构建数字孪生提供革命性解决方案。

weixin_30823001的博客 321

系统配置发生变更时 activity状态保持

系统配置发生变更时,系统会 (重启 activity 对象 ) 1、销毁原来的activity对象 2、重新创建 activity对象,初始化布局参数 1、限定屏幕方向 通常最容易遇到的系统配置发生变更,就是屏幕方向发生变化,可以通过限定屏幕方向来解决activity重启 在activity标签中添加screenOrientation属性 android:screenOrie...

墨轩 567

Oracle EBS(R12+)通过Multi-Org 多组织架构、Multi-Ledger 多账簿、SLA 子分类账会计、多币种引擎、多会计政策并行五大核心能力,为跨国企业提供一体化、自动化、合规的

Oracle EBS(R12+)提供全球会计核算解决方案,通过Multi-Org多组织架构实现跨国集团数据隔离与共享,支持四层组织结构(业务组→法律实体→经营单位→库存组织)。Multi-Ledger多账簿功能允许一笔业务多准则自动核算,包含主账簿、辅助账簿和报告币种。系统内置多币种处理引擎,覆盖全流程货币业务,支持自动重估、再计量和折算。通过SLA子分类账会计实现多会计政策并行处理,满足不同国家会计准则和税制要求。该方案可同时支持本地法定、集团合并及管理分析需求,实现全球财务数据集中管理,提升合规性和运营

金牌架构师 553

Activity异常被关闭的两种情况

文章目录Activity异常关闭的两种情况如何使得activity不被重新创建? Activity异常关闭的两种情况 情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建,当程序启动时系统就会根据当前设备的情况去加载合适的Resource资源,比如说横屏手机和竖屏手机会拿到两张不同的图片(设定了landscape或者portrait状态下的图片).比如说当前activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了变化,在默认情况下,Activity就会被销毁并且重新创建,当然我们

Yrainy_D的博客 2061

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

手把手教你学 AI芯片 SOC软件开发专栏简介

在AI芯片(如NPU、GPU加速器)爆发式增长的今天,软件栈开发已成为AI应用落地的核心瓶颈。无论是模型推理加速、低延迟部署,还是能效优化,都依赖于对芯片底层软件的深度掌握。然而,许多开发者困于“只会调用API,不懂驱动实现”的困境,导致性能瓶颈难以突破。本专栏《手把手教你学 AI芯片 SOC软件开发》专为AI工程师、嵌入式开发者及系统架构师打造,从零基础切入,系统拆解AI芯片SOC(System on Chip)的完整软件栈,覆盖Runtime(运行时)

MHD0815的博客 172

《Android开发艺术探索》读书笔记第一章--Activity的生命周期和启动模式

本文是《Android开发艺术探索》读书笔记系列第一篇,作为学习的一个自我总结和二次复习 一、Activcity的生命周期 Activcity生命周期的切换过程总览 针对流程图,附加一些具体说明: 1. 一个Activity新启动时,onCreate -> onStart -> onResume 2. 当打开新Activity或者返回桌面时,旧Activity 回调 onPa

一颗烂葱的博客 446

RK3568笔记五十四:SORT实时目标追踪

YOLOv5具备目标检测的功能,把视频分解成多幅图像并逐帧执行时,如果视频帧中有多个目标,如何知道一帧中的目标和上一帧是同一个对象就是目标跟踪的工作。DeepSort是实现目标跟踪的算法,从sort(simple online and realtime tracking)演变而来,使用卡尔曼滤波器预测所检测对象的运动轨迹,匈牙利算法将它们与新的检测目标相匹配。结合YOLOv5和DeepSORT可以在实时场景中实现高效的目标检测和跟踪。

791

Android开发艺术探索读书笔记 第一章 Activity的生命周期和启动模式

1. Activity生命周期全面分析 生命周期 onCreate:表示Activity正在被创建 onRestart:表示Activity正在重新启动 onStart:表示Activity正在启动,Activity已经可见,但是还没有出现在前台 onResume:表示Activity已经可见,并且出现在前台开始活动 onPause:表示Activity正在停止,可以存储数据、停止动画等,...

哆啦A梦的博客 1381

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Activity生命周期和启动模式 - Android开发艺术探索读书笔记(第一章)

提要:终于有时间着手阅读这本书啦,良心之作,必须好好研究下,于是决心做起读书笔记,一些个人的见解,希望帮助到其他小白理解的同时自己也能坚持续更下去,坚持,难能可贵,一起加油啦~ 第一章 - Activity生命周期和启动模式 1.1 - 生命周期的全面分析     重点 - 生命周期变化、异常结束与正常结束 1、回想这几种情况

没有故事的A同学 701

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android开发艺术探索 笔记,Android 开发艺术探索读书笔记(一)

之前断断续续地学了一些 Android 开发基础,也写过几个简单的 app,但都是特别简单的那种,还有很多知识学完了没有用过,现在已经忘得差不多了。最近找到一本书叫 Android 开发艺术探索(作者叫任玉刚,据说是百度的大牛),2015 年出版的,看完第一章后感觉不错,很适合我这种有点基础的人看,于是决定写个读书笔记,记录自己从书中学习到的知识。第一章本章主要介绍了 Activity 相关的一些...

weixin_42395498的博客 442

《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式

前言 activity作为一个新\老android开发人员是熟悉不过了,不过细节决定成败,笔者把自己在实际开发中的遇到的问题总结下.鉴于之前已经记录了一片activity的日志,这边就只简单做知识点的归纳. Activity生命周期 正常情况下: 1.从APP中点击home键返回到系统桌面,在返回到activity,调用的是onRestart()这个方法. 2.onStart()和onStop(

qq_28690547的博客 786

《Android开发艺术探索》之Activity的生命周期和启动模式(一)

Android开发艺术探索 第一章:Activity的生命周期和启动模式 ...

云瀚的自习室 1942

《Android开发艺术探索》第1章-Activity 的生命周期和启动模式读书笔记

目录1 Activity 的生命周期1.1 Activity 的生命周期方法有哪些?1.2 正常情况下,Activity 的生命周期切换过程是怎样的?1.3 onStart 和 onResume、onPause 和 onStop 的区别是什么?1.4 假设当前 Activity 为 A,如果这时用户打开一个新的 Activity B,那么 B 的 onResume 和 A 的 onPause 哪个...

willwaywang6 1515

我的Android开发笔记之Activity的生命周期和启动模式

1.onRestart()活动由不可见重新变为可见。2.onStart()此时activity已经可见,但是在后台显示。3.onResume()此时activty在前台显示4.onPause()此时activity正在停止,活动显示在后台,不能进行太耗时的操作,不然会影响新的活动的显示5.onStop()此时activity即将停止,可以做一些稍微重量级的操作。6.onStart()和onStop()与onResume()和onPause()的区别在与前者为是否显示,后者是否显示在前台。

2303_80343762的博客 1348

《Android开发艺术探索》笔记 — Activity的生命周期和启动模式

其实艺术探索这本书我很早就买了,传说中的中级工程师迈向高级工程师看的进阶书。哈哈哈!买了后怜香惜玉的看了几天。喔,IPC机制,View事件分发机制,消息机制,一个Drawable都能那么多知识点,好吧,我知道是我技术水平还没到达能看懂这本书。 于是,为了强行看懂书中贴出的源码,我去学了设计模式

yinhuanxu 2109

【Android】Activity生命周期与五种启动模式

Android会不惜一切代价让它存活下来,甚至会根据需要杀死栈中更底部的 Activity 所依附的应用,以保障该Activity 所需的资源。当另一个 Activity 变为活动状态时,这个 Activity 就会被暂停,当变为不可见时,它就会被停止。当一个 Activity 变得完全不可见时,它就会处于停止状态,而所有 Activity 在进入停止状态之前都要经历暂停状态以进行转换。在此环境中,可能会出现多个应用同时可见,但只有用户最后一次与之交互Activity 才会被认为处于活动状态。

Patrick_yuxuan的博客 1585

安卓开发艺术探索一——Activity的生命周期和启动模式

文章目录Activity的生命周期和启动模式Activity的生命周期正常情况下的生命周期异常情况下的生命周期1.系统配置改变导致活动被杀死并重新创建2.资源内存不足导致低优先级的Activity被杀死Activity的启动模式启动模式的设置IntentFilter的匹配规则1.action的匹配规则2.category的匹配规则3.data的匹配规则参考资料 Activity的生命周期和启动模式...

qq_43935080的博客 789

Android开发艺术探索之Activity篇总结

本文内容来自《Android开发艺术探索》第一章,个人学习提炼总结,欢迎指正。 1.1典型情况下的生命周期 onCreate():表示Activity正在被创建,初始化布局资源+Activity所需要数据等。 onStart():表示Activity正在启动,Activity已经可见,但是未出现在前台(正在显示),不可与用户交互。 onResume():表示Activity获得焦点,...

阿Ciu 1485

Android activity的启动模式和生命周期

Activity的四大启动模式和生命周期

1442

【Android】Activity 的生命周期和启动模式

本文简单介绍了 Android 中 Activity 的状态、生命周期和启动模式

LiuYaoheng的博客 1220

Android深入探索Activity生命周期与启动模式

参考资料:《安卓开发艺术探索》任玉刚。

2401_86909484的博客 1043
上一篇: 仿网易新闻标签选择器(可拖动)-TabMoveLayout
下一篇: allowTaskReparenting属性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值