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属性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional:全局事务注解,添加了以后可实现分布式事务的回滚和提交,用法与spring…

数据分析-Pandas如何重塑数据表

数据分析-Pandas如何重塑数据表 数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据&…

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

anoconda 安装报错

表现形式:Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法: 网址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…

Java循环语句

1:for循环结构 循环结构有三种语句,分别是: for循环 while循环 do…while循环 这三种循环可以做相同的事情,当然它们也有小的区别 1.1 for循环结构 这段代码的作用,是用来展示手机信息1000次。 还提到了这里的几…

Rust-trait

Rust语言中的trait是非常重要的概念。 在Rust中,trait这一个概念承担了多种职责。在中文里,trait可以翻译为“特征”“特点”“特性”等。 成员方法 trait中可以定义函数。用例子来说明,我们定义如下的trait: 上面这个trait包含了一个方法…

甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

在日常的软件开发中,测试是确保代码质量的关键步骤之一。然而,对于测试报告的生成和测试结果的可读性,一直以来都是开发者关注的焦点。Pytest插件 pytest-sugar 以其清晰而美观的输出,为我们提供了一种愉悦的测试体验。本文将深入…

Springboot WebFlux项目结合mongodb进行crud

第一步:创建项目 第二步:给mongodb插入数据 第三步:创建实体类 package org.cyl.test02.entity;// Task.java import lombok.Data;Data public class Task {private String id;private String description; }第四步:创建Reposito…

React Native 原生组件回调JS层方法和 JS 层调用原生组件的事件方法

一、原生组件回调 JS 层提供的事件方法 比如 TextInput 组件 onChangeText 属性,输入事件是发生在原生层的但是需要通知 JS 层发生了变化,并执行 JS 层的方法。 1、给原生组件添加一个按钮用于触发原生事件方法 在 XML 中添加一个按钮 为了方便让 Inf…

三、电脑软件路径移动方式

一、电脑文件移动 当我们想整理硬盘或者移动软件时,常常会遇到多种多样的问题,下面就来说明一下我遇到的问题 1.桌面 解释:移动路径会导致桌面快捷方式失效,下面以图片解答如何恢复 原理:桌面快捷方式保存在C:\Users…

java基于SSM框架的宿舍管理系统的设计与实现论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对宿舍信息管理的提升&#xff0c…

ubuntu22.04虚拟机安装教程

ubuntu22.04虚拟机安装教程 1.下载镜像: https://ubuntu.com/ 打开后点击Download: 或者用清华镜像源下载:滑到最底下,点击ubuntu-releases 选中这个版本ubuntu-22.04.3-desktop-amd64点击下载 2.虚拟机加载:打开VM&#xff0…

Debian12 安装jenkins 公钥配置

jenkins公钥配置 参考:Debian Jenkins 软件包 这是 Jenkins 的 Debian 软件包存储库,用于自动安装和升级。 要使用此存储库,请先将密钥添加到您的系统(对于每周发布行): sudo wget -O /usr/share/keyring…

2024年湖北职称评审对论文的要求

1.期刊发表版面的时间节点2024年12月及之前 2.期刊是正规的期刊,有国内刊号 3.期刊能在国家出版社总署检索到 4.文章内容查重符合知网查重标准 5.论文方向和申报专业方向一致 6.必须要是第一作者或者独著 7.评正高的人才们要准备中文核心论文两篇或出版专业学术论著…

【JVM】类的生命周期

目录 类的生命周期 加载阶段 连接阶段 初始化阶段 类的使用阶段 类的加载阶段 类的生命周期 加载阶段 在加载阶段,类加载器首先会通过一个类的全限定名来获取定义此类的二进制字节流。这个步骤主要是将整个Class 文件解析成二进制流。 (全限定名是…

基于OCR的包装产品生产日期识别系统

基于OCR的包装产品生产日期识别系统 背景技术方案PaddleOCR模型应用数据挑战与解决方案优化策略 项目实施步骤结果与展望 背景 在工业生产中,产品包装上的生产日期信息是至关重要的,它关系到物资的时效性和质量。为了更快、更准确地提取这些信息&#x…

便捷特惠的快递寄件快递物流折扣平台 ,通常都有什么常见问题?

首先,最重要的一点是怎么寄快递更便宜? 我们在寄快递时,尽量把包裹压缩空间大一点,这样在体积上面就会减少一部分的费用呢,另外就是选择有优惠的平台下单。例如在闪侠惠递平台下单,单单打折,单…

Redis分布式锁--java实现

文章目录 Redis分布式锁方案:SETNX EXPIRE基本原理比较好的实现会产生四个问题 几种解决原子性的方案方案:SETNX value值是(系统时间过期时间)方案:使用Lua脚本(包含SETNX EXPIRE两条指令)方案:SET的扩展…

python爬虫,验证码识别,携带cookies请求

古诗词网案例!!! 识别验证码类型: # 此处用到的图片验证码识别网址为:http://ttshitu.com/ 图鉴 import base64 import json import requests # 一、图片文字类型(默认 3 数英混合): # 1 : 纯数字 # 1001&…

@PreAuthorize注解

前言:RuoYi框架中,菜单管理的权限标识字段通常用于定义用户对特定菜单或操作的访问权限。 这个权限标识字段通常会被用在两个地方: 1. 后端:在Spring Security的PreAuthorize注解中,用于控制对特定方法的访问。例如&am…