Android-基础

Activity生命周期

在这里插入图片描述
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

onSaveInstanceState 在9.0之前是onStop()生命周期之前回调,不一定是在onPause()之前还是之后,在 Android 9 及其之后的版本是在 onStop() 生命周期之后回调。onRestoreInstanceState一定是在onstart()之后调用。

Activity启动模式

standard - 标准模式:创建 Activity 的实例,并 添加到启动它的源 Activity 所在的任务的栈顶。不管栈内或栈顶是否已存在该 Activity 的实例。
singleTop - 栈顶复用模式:当 启动它的源 Activity 所在的任务的栈顶已存在 该 Activity 的实例,那么不创建该 Activity 的新实例 —— 而是走该 Activity 实例的 onNewIntent 回调,注入新的 intent,并执行 onResume(也就是不走 onCreate、onStart)。否则就在栈顶创建一个新实例。
singleTask - 栈内复用模式:当 该 Activity 所属的任务中已存在 该 Activity 的实例,那么不创建该 Activity 的新实例 —— 而是 首先将任务中该 Activity 实例之上的 Activity 全都出栈,并且走该 Activity 实例的 onNewIntent 回调,注入新的 intent,并执行 onResume。否则就在栈顶创建一个新实例。(singleTask Activity 的所属任务,取决于清单中配置的 taskAffinity,如果没有用 taskAffinity 指定任务名,默认是 Activity 所属 App 的默认任务。)
singleInstance - 单例模式:会新建一个任务,并且 独享这个任务。也即 整个系统 有且只有 这么一个 Activity 的实例,多个 App 可共享该实例。
singleInstancePerTask 模式:Android 12 新增 singleInstancePerTask 启动模式,主要是为了更好的支持 “平板、桌面” 等场景下,窗口多开的需求。 singleInstancePerTask 和 singleInstance 的区别在于,一个 Activity 类可以存在多个实例,每个实例都独占一个 task。
standard 邮件、mainfest中没有配置就默认标准模式
singleTop 登录页面 、推送通知栏;
singleTask 程序模块逻辑入口:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面
singleInstance 系统Launcher、锁屏键、来电显示等系统应用

FLAG_ACTIVITY_NEW_TASK,近似于 singleTask 模式。当在清单中为 Activity 设置 taskAffinity 属性时,能跳转到指定任务(若先前不存在该任务,则先创建该任务)。该 FLAG 通常用于从非 Activity 的环境下启动 Activity(这么设计,是为了给 Activity 一个容身之处)。
FLAG_ACTIVITY_SINGLE_TOP ,对应着 singleTop 模式。
FLAG_ACTIVITY_CLEAR_TOP,近似于 singleTask 模式。当该 Activity 已存在于任务中,该 Activity 之上的 Activity 都会出栈,并且该 Activity 如为 standard,则会被重新创建,如为 singleTop,则是走 onNewIntent。
所以 即使 FLAG_ACTIVITY_NEW_TASK 与 FLAG_ACTIVITY_CLEAR_TOP 共同使用,其效果也并不完全等同于 singleTask 模式。

清单文件中,Activity 的属性 allowTaskReparenting = true 意味着该 Activity 可以从一个任务迁移(回)到 taskAffinity 指定的任务。
该属性的存在,主要是为了支持 DeepLink 的使用场景:
例如你通过 浏览器链接 启动了 知乎 的 allowTaskReparenting = true 的 Activity,那么此时该 Activity 处于 浏览器 的任务中;当通过 Home 键让 浏览器任务脱离焦点,并从桌面启动知乎时,由于该 Activity 被指定的 taskAffinity 值与 知乎 的任务一致,因而该 Activity 又会被迁移回 知乎 的任务中继续展示。

activity横竖屏切换时activity的生命周期,view的生命周期

1、不配置configChanges时:切换横竖屏时生命周期各自都会走一遍。
2、配置configChanges时:必须设置为android:configChanges="orientation|screenSize"时,才不会重走生命周期方法,只会回调onConfigurationChanged方法,注意,不配置configChanges或是配置了但不同时包含这两个值时,都会重走一遍生命周期方法,并且不会回调onConfigurationChanged方法。
3、另外重走生命周期方法时,还会调用onSaveInstanceState() 与onRestoreIntanceState(),资源相关的系统配置发生改变或者资源不足:例如屏幕旋转,当前Activity会销毁,并且在onStop之前回调onSaveInstanceState保存数据,在重新创建Activity的时候在onStart之后回调onRestoreInstanceState。其中Bundle数据会传到onCreate(不一定有数据)和onRestoreInstanceState(一定有数据)。用户或者程序员主动去销毁一个Activity的时候不会回调,其他情况都会调用,来保存界面信息。如代码中finish()或用户按下back,不会回调。

五种进程

第一高:前台进程
前台进程是Android系统中最重要的进程,是与用户正在交互的进程。
第二高:可见进程
可见进程指部分程序界面能够被用户看见,却不在前台与用户交互。
第三高:服务进程
一个包含已启动服务的进程就是服务进程,服务没有用户界面,不与用户直接交互,但能够在后台长期运行,提供用户所关心的重要功能。
第四高:后台进程
如果一个进程不包含任何已经启动的服务,而且没有用户可见的Activity,则这个进程就是后台进程。
第五高:空进程
空进程是不包含任何活跃组件的进程。在系统资源紧张时会被首先清楚。

动画

Android中的动画有哪几类,它们的特点和区别是什么?
Android中动画大致分为3类:帧动画、补间动画(Tween Animation)、属性动画(Property Animation)。

帧动画:通过xml配置一组图片,动态播放。很少会使用。
补间动画(Tween Animation):大致分为旋转、透明、缩放、位移四类操作。很少会使用。
属性动画(Property Animation):属性动画是现在使用的最多的一种动画,它比补间动画更加强大。属性动画大致分为两种使用类型,分别是 ViewPropertyAnimator 和 ObjectAnimator。前者适合一些通用的动画,比如旋转、位移、缩放和透明,使用方式也很简单通过 View.animate() 即可得到 ViewPropertyAnimator,之后进行相应的动画操作即可。后者适合用于为我们的自定义控件添加动画,当然首先我们应该在自定义 View 中添加相应的 getXXX() 和 setXXX() 相应属性的 getter 和 setter 方法,这里需要注意的是在 setter 方法内改变了自定义 View 中的属性后要调用 invalidate() 来刷新View的绘制。之后调用 ObjectAnimator.of 属性类型()返回一个 ObjectAnimator,调用 start() 方法启动动画即可。
补间动画与属性动画的区别:
补间动画是父容器不断的绘制 view,看起来像移动了效果,其实 view 没有变化,还在原地。
属性动画是通过不断改变 view 内部的属性值,真正的改变 view。

TimeInterpolator(时间插值器)
作用:根据时间流逝的百分比计算出当前属性值改变的百分比。
系统已有的插值器:
1、LinearInterpolator(线性插值器):匀速动画。
2、AccelerateDecelerateInterpolator(加速减速插值器):动画两头慢,中间快。
3、DecelerateInterpolator(减速插值器):动画越来越慢。

TypeEvaluator(类型估值算法,即估值器):
作用:根据当前属性改变的百分比来计算改变后的属性值。
系统已有的估值器:
IntEvaluator:针对整型属性
FloatEvaluator:针对浮点型属性
ArgbEvaluator:针对Color属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux批量查杀进程

linux批量查杀进程 方案1:killall killall 命令来杀掉所有指定名称的进程。 killall -9 uwsgi这将会杀掉所有名称为 uwsgi 的进程,包括在后台运行的进程。 注意,使用 killall 命令要小心,因为它可能会误杀其他不相关的进程。在…

WiFi7: MLO操作之AP MLD的发现—AP的行为

原文:如果AP是AP MLD的transmitted BSSID,那么Beacon帧和Probe Response 帧必须在Reduced Neighbor Report element中包含对应各AP的TBTT Information域,并将TBTT Information Length域设置为16或者更高(见9.4.2.169.2(Neighbor AP Information field))。FILS Discovery帧…

华为HCIE课堂笔记第十五章 IPv6过渡技术

第十五章 IPv6过渡技术 15.1 简介 1、隧道技术 2、双栈技术 3、地址转换技术 15.2 隧道技术 15.2.1 ipv6 over ipv4 隧道 手工隧道:IPv6 Over IPv4隧道 Ipv6 Over IPv4:IPv6孤岛通过IPv4网络之间进行通信,IPv6的报文封装IPv4报文之上…

测试人员必备基本功(3)

容易被忽视的bug 第三章 查询列表容易被忽视的bug 文章目录 容易被忽视的bug第三章 查询列表容易被忽视的bug 前言1.查询角色2.接口设计 三、测试设计1.测试点2.容易发现bug的测试点如下: 总结 前言 一个WEB系统的所有功能模块,其实都是围绕“增、删、…

Pandas实战100例-专栏介绍

Pandas,Python数据科学的心脏,是探索和分析数据世界的强大工具。想象一下,用几行代码就能洞察庞大数据集的秘密,无论是金融市场趋势还是社交媒体动态。 通过Pandas,你可以轻松地整理、清洗、转换数据,将杂…

Neo4j Cypher (1):使用Cypher删除边

在Neo4j中,删除边(即关系)可以通过使用Cypher查询语言来实现。关系可以基于其类型、属性或者它连接的节点来指定和删除。以下是一些删除关系的常见方法: 1. 删除特定类型的关系 如果您知道关系的类型,可以使用以下查…

山西电力市场日前价格预测【2024-01-15】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-15)山西电力市场全天平均日前电价为399.10元/MWh。其中,最高日前电价为583.33元/MWh,预计出现在18:15。最低日前电价为275.09元/MWh,预计…

【MySQL】:探秘主流关系型数据库管理系统及SQL语言

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL概述1.1 数据库相关概念1.2 主流数据库1.3 数据模型1.3.1 关系型数据库…

MyBatis第三课

目录 回顾 #和$区别 #(预编译SQL)和$(即时SQL,它是进行的字符串拼接)的区别,其中之一就是预编译SQL和即时SQL的区别 原因: 回顾 两者的共同点 MaBits可以看作是Java程序和Mysql的沟通桥梁&…

uniapp导航栏组件如何使用

在uni-app中&#xff0c;可以使用官方提供的uni-navigator组件来实现导航栏的功能。 具体使用步骤如下&#xff1a; 在App.vue文件中&#xff0c;引入uni-navigator组件&#xff1a; <template><view><uni-navigator /><router-view /></view>…

VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络

VMware workstation安装debian-12.1.0虚拟机&#xff08;最小化安装&#xff09;并配置网络 Debian 是一个完全自由的操作系统&#xff01;Debian 有一个由普罗大众组成的社区&#xff01;该文档适用于在VMware workstation平台安装最小化安装debian-12.1.0虚拟机。 1.安装准…

Linux Ubuntu搭建我的世界Minecraft服务器实现好友远程联机MC游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 Li…

制造领域 基础概念快速入门介绍

1、基本背景知识 本定义结合国家标准文件有所发挥&#xff0c;仅供参考。 产品&#xff1a;是生产企业向用户或市场以商品形式提供的制成品&#xff1b; 成套设备&#xff1a;在生产企业一般不用装配工序连接&#xff0c;但用于完成相互联系的使用功能的两个或两个以上的产…

【快速解决】保姆级Anaconda安装教程

目录 第一步 ​编辑第二步 ​编辑第三步 第四步 第五步 第六步 ​编辑 第七步 第八步 第九步 第一步 在anaconda清华大学开源软件镜像站下载anaconda。点击这里进入 我这里选的是windows-x86_64。 第二步 下载好以后进行安装 第三步 第四步 第五步 选择…

SpringBoot集成Skywalking实现分布式链路追踪

官方网址&#xff1a; Apache SkyWalking官方文档&#xff1a; SkyWalking 极简入门 | Apache SkyWalking下载地址&#xff1a;Downloads | Apache SkyWalking Agent&#xff1a;以探针的方式进行请求链路的数据采集&#xff0c;并向管理服务上报&#xff1b; OAP-Service&am…

python实现发红包

目录 一: 平均红包实现 二:随机红包 一: 平均红包实现 使用round保留两位小数,让红包大小相差不大,可以拿总钱数/总人数得到人均钱数,然后在人均钱数的一定范围内生成随机数 import random def generate_equal_red_envelope(num_envelopes, total_amount): # 平…

一条命令解决安装torch_scatter torch_sparse torch_cluster torch_spline

在相应环境下输入 pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.0.0cu118.html该命令安装了pyg_lib包以及一些与PyTorch相关的包&#xff08;torch_scatter、torch_sparse、torch_cluster、torch_sp…

一文带你了解注册信息安全专业人员CISP

CISP即"注册信息安全专业人员"&#xff0c;系国家对信息安全人员资质的最高认可。英文为Certified Information Security Professional (简称CISP)&#xff0c;CISP系经中国信息安全测评中心实施国家认证。 CISP证书涵盖方向&#xff1a; “注册信息安全工程师”&a…

kafka之java客户端实战

1. kafka的客户端 Kafka提供了两套客户端API&#xff0c;HighLevel API和LowLevel API。 HighLevel API封装了kafka的运行细节&#xff0c;使用起来比较简单&#xff0c;是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管理Kafka的运行细节&#xff0c;Pa…

C#中委托的理解

C#中的委托类似于C中的函数指针&#xff0c;是一种引用类型&#xff0c;表示对具有特定参数列表和返回类型的方法的引用。 委托包含两部分&#xff0c;委托的声明和委托的实例化。 委托的声明示例如下&#xff1a; public delegate string printString(string str); 委托的实…