Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin
Android横竖屏切换configChanges="screenSize|orientation"避免activity销毁重建,Kotlin
如果不在Androidmanifest.xml设置activity的:
android:configChanges="screenSize|orientation"
那么,每次横竖屏切换activity都会重新走onCreate() ... onDestory()生命周期,即销毁重建。如果设置了上面的配置后,每次横竖屏切换,activity只是回调:
override fun onConfigurationChanged(newConfig: Configuration) {super.onConfigurationChanged(newConfig)}
而不再走或触发activity的创建-消耗重的生命周期。
import android.content.res.Configuration
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.UUIDconst val ITEM_COUNT = 300class MainActivity : AppCompatActivity() {private var mAdapter: MyAdapter? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("fly", "onCreate")setContentView(R.layout.activity_main)val rv = findViewById<RecyclerView>(R.id.rv)val layoutManager = GridLayoutManager(this, 3)rv.layoutManager = layoutManagermAdapter = MyAdapter()rv.adapter = mAdapter}override fun onDestroy() {super.onDestroy()Log.d("fly", "onDestroy")}class MyAdapter : RecyclerView.Adapter<MyVH> {private var mList = mutableListOf<MyItem>()constructor() {val list = mutableListOf<MyItem>()for (i in 0 until ITEM_COUNT) {val item = MyItem(i)item.data = 0Litem.change = falselist.add(item)}mList = list}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVH {val view = LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_2, parent, false)return MyVH(view)}override fun getItemCount(): Int {return mList.size}override fun onBindViewHolder(holder: MyVH, position: Int) {holder.text1.text = "pos=${mList[position].pos}"holder.text2.text = "data=${mList[position].data}"}}class MyVH(itemView: View) : RecyclerView.ViewHolder(itemView) {val text1: TextView = itemView.findViewById(android.R.id.text1)val text2: TextView = itemView.findViewById(android.R.id.text2)}class MyItem {var pos = 0var data = 0Lvar contentId = UUID.randomUUID()var change = falseconstructor(pos: Int) {this.pos = pos}constructor() : this(0) {}}override fun onConfigurationChanged(newConfig: Configuration) {super.onConfigurationChanged(newConfig)Log.d("fly", "onConfigurationChanged")}
}
启动后,滑动到pos=30:

横竖屏切换,可以看到,Android自动在切换后把位置滚动到pos=30,无须recycleview再做滚动计算和调整:

日志:

Android重写onConfigurationChanged规避横竖屏切换时候重新进入onCreate生命周期-CSDN博客文章浏览阅读2.1k次。Android重写onConfigurationChanged规避横竖屏切换时候重新进入onCreate生命周期Android系统内在的机制,当activity在横竖屏切换时候,会强制重新开始进入activity的生命周期onCreate,在有些特殊的场景,开发者不希望重新进入onCreate生命周期,那么,可以通过重写Android的onConfigurationChanged规避。_onconfigurationchangedhttps://blog.csdn.net/zhangphil/article/details/50607742
相关文章:
Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin
Android横竖屏切换configChanges"screenSize|orientation"避免activity销毁重建,Kotlin 如果不在Androidmanifest.xml设置activity的: android:configChanges"screenSize|orientation" 那么,每次横竖屏切换activity都会…...
【C语言基础】:操作符详解(二)
文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性:优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾:【C语言基础】:操作符详解(一) 一、上期扩展 …...
模型训练基本结构
project_name/ │ ├── data/ │ ├── raw/ # 存放原始数据 │ ├── processed/ # 存放预处理后的数据 │ └── splits/ # 存放数据集划分(训练集、验证集、测试集等) │ ├── noteboo…...
Redis 数据结构详解:底层实现与高效使用场景
String(字符串) 底层实现细节: 动态字符串(SDS): SDS相比于C语言的原生字符串,提供了自动内存管理和预分配机制。当字符串长度增加时,SDS会预先分配额外的空间,以减少内存重新分配…...
Vue2:router-link的replace属性
一、情景说明 我们在用浏览器访问网站的时候 知道浏览器会记录访问的历史路径,从而,可以退回到之前的页面 那么,Vue项目中的路由组件,通过router-link跳转,也是可以退回的 这里,我们用replace来屏蔽退回的…...
普中51单片机(DS18B20温度传感器)
DS18B20温度传感器原理 内部结构 64位(激)光刻只读存储器 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身…...
2.23C语言学习
P1480 A/B Problem 高精度数除以非高精度数 #include<bits/stdc.h> long long b[66660],c[66660],sum0; char a[66660]; int n; int main(){scanf("%s",a);scanf("%d",&n);int lenstrlen(a);for(int i1;i<len;i){b[i]a[i-1]-0;}for(int i1;…...
origin/master master
这里实际上有三件事:origin master是两件事,origin/master一件事。共计三件事。 两个分支: master 是一个本地分支 origin/master是远程分支(它是名为“origin” 的远程分支的本地副本,名为“master”) 一个…...
【数据结构】时间复杂度与空间复杂度
目录 时间复杂度 空间复杂度 时间复杂度 算法的时间复杂度并不是指一个代码运行时间的快慢,因为在不同机器上运行的时间肯定不同,因此算法的时间复杂度指的是基本操作的执行次数,他是一个数学意义上的函数。这个函数并不是C语言中那种函数&…...
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
HTML部分 <body><button id"btn">单击我</button><button id"delAll">删除所有事件</button><div id"test"></div> </bady>jQuery代码 <script type"text/JavaScript" src"…...
【Git】Git命令的学习与总结
本文实践于 Learn Git Branching 这个有趣的 Git 学习网站。在该网站,可以使用 show command 命令展示所有可用命令。你也可以直接访问网站的sandbox,自由发挥。 一、本地篇 基础篇 git commit git commit将暂存区(staging areaÿ…...
前端工程化面试题 | 18.精选前端工程化高频面试题
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
大公司的工程师是怎么废掉的...
大家好,我是砖一。 此文作者以嵌入式工程师为基本视角,细说了从初阶到高阶工程师的资质需求,并提示工程师职业道路上的陷阱。可供参考。 一,基础知识 一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始&…...
将yolov8权重文件转为onnx格式并在c#中使用
yolo模型转ONNX 在yolov8中,我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类,使用pip安装ultralytics库,然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…...
在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
一、SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解 在Spring Boot启动时禁止自动配置数据源相关的组件。 SpringBootApplication(exclude {DataSourceAutoConfiguration.class})注解的使用案例 这个注解通常应该写在微服务项目的主启动类上&…...
程序人生:不积跬步无以致千里
程序人生 癸卯年冬月,往渭南韩城,拜访司马迁祠。入门攀爬而上,至人有困乏之时,抬头现:高山仰止。归路下山,始现三官洞,遥想西汉时三官洞,出口处刻意再拜别:高山仰止。泪…...
通过二叉树例题深入理解递归问题
目录 引入: 例1:二叉树的前序遍历: 例2: N叉树的前序遍历: 例3:二叉树的最大深度: 例4:二叉树的最小深度 例5:N叉树的最大深度: 例6:左叶子…...
【Android 协程常见用法】
我们这里只讲解一下,协程在Android项目中常见用法,原理知识不在进行说明了。 依赖 lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。依赖库: implementation androidx.lifecycle:lifecycle…...
python 进程笔记一 (概念+示例代码)
1. 进程的概念 进程是资源分配的最小单位,也是线程的容器,线程(python 线程 (概念示例代码))是CPU调度的基本单位,一个进程包括多个线程。 程序:例如xxx.py是一个程序 进程…...
各中间件数据库默认访问端口总结
说明 在生态丰富的开发环境下,我们常常需要接触很多中间件产品,中间件默认的连接端口以及可视化ui访问端口也时不时的需要用到,这里循序渐进做好登记,以备查阅! 中间件/数据库名称默认端口管理台端口默认账号密码rabbi…...
SenseVoice语音识别镜像深度体验:自动语言检测+高效推理,实测效果惊艳
SenseVoice语音识别镜像深度体验:自动语言检测高效推理,实测效果惊艳 1. 开箱即用的语音识别体验 当我第一次启动SenseVoice语音识别镜像时,最直观的感受就是"快"。这个基于ONNX量化的多语言语音识别服务,从启动到可用…...
GPT-SoVITS应用场景解析:为视频配音、做有声书,简单又实用
GPT-SoVITS应用场景解析:为视频配音、做有声书,简单又实用 1. 引言:声音克隆技术带来的变革 想象一下,你正在制作一个短视频,需要为不同角色配音。传统方式要么自己录制(效果可能不专业)&…...
16张动图解析网络基础原理与应用
16张动图趣味解读网络原理1. 网络基础概念1.1 网络的定义与作用网络存在于日常生活中的每一个角落,电脑、打印机、手机、电视等设备都属于网络设备。通过网络连接这些设备,可以实现数据传输和共享,让工作生活更加便捷。典型的网络应用场景包括…...
3个实用技巧:如何用LeagueAkari提升你的英雄联盟游戏体验
3个实用技巧:如何用LeagueAkari提升你的英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联…...
CAPL调用DLL实现UDS 27服务加密算法:从C代码到Vector环境的完整打通
CAPL调用DLL实现UDS 27服务加密算法:从C代码到Vector环境的完整打通 在汽车电子测试领域,UDS(Unified Diagnostic Services)协议的安全访问(27服务)是保护ECU免受未授权访问的关键机制。当我们需要在Vector…...
基于LSTM时间序列预测思想优化百川2-13B的对话连贯性
基于LSTM时间序列预测思想优化百川2-13B的对话连贯性 你有没有遇到过这种情况?和一个大模型聊得正起劲,聊了十几轮甚至几十轮之后,你突然发现,它好像“失忆”了。你之前明明告诉过它你的名字、你的职业,甚至你们刚刚讨…...
储能系统核心三部曲:BMS、EMS与PCS的协同交响
1. 储能系统的三大核心组件 第一次接触储能系统时,很多人都会被各种专业术语搞得晕头转向。其实就像交响乐团需要指挥、弦乐和管乐配合一样,一个高效的储能系统也离不开BMS、EMS和PCS这三大核心组件的协同工作。我在实际项目中见过太多因为组件间配合不当…...
如何在Python中正确调用DeepSeek-Reasoner获取思考过程(附完整代码示例)
深度解析:Python调用DeepSeek-Reasoner获取思维链的工程实践 当开发者需要构建具备复杂推理能力的AI应用时,获取模型完整的思考过程(Reasoning Content)往往比最终答案更有价值。DeepSeek-Reasoner作为专为逻辑推理优化的模型&…...
PCL2社区版:打造个性化Minecraft启动器的终极指南
PCL2社区版:打造个性化Minecraft启动器的终极指南 【免费下载链接】PCL-CE PCL2 社区版,可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL-CE 想要完全掌控你的Minecraft游戏体验吗?PCL2社区版(…...
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型 最近,一个名为“霜儿-汉服-造相Z-Turbo”的AI模型在圈子里悄悄火了起来。它干的事儿挺有意思:不是凭空创造新形象,而是试图“复原”那些活在文字、画作和历史记忆里…...
