Android屏幕显示 android:screenOrientation configChanges 处理配置变更 代码中动态切换横竖屏

news2024/11/24 21:18:10

显示相关

屏幕朝向

https://developer.android.com/reference/android/content/res/Configuration.html#orientation
具体区别如下:

activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值,可以动态地根据设备的旋转或用户的操作进行改变。例如,当用户将设备从纵向旋转到横向时,获取到的屏幕方向值也会相应地改变。

Manifest中配置的orientation是用于指定活动的默认方向,即在没有其他因素影响时,活动应该显示的方向。它可以有以下几个值:

portrait:纵向(竖屏)方向。
landscape:横向(横屏)方向。
sensor:根据设备的旋转自动调整方向。
user:根据用户的偏好自动调整方向。

这个配置可以在Manifest文件中的标签中进行设置。但是,它只是一个默认值,实际的屏幕方向还会受到其他因素的影响,如设备旋转、用户操作等。
activity.getResources().getConfiguration().orientation获取的是当前设备的屏幕方向值,而Manifest中配置的orientation是用于指定活动的默认方向。

总结来说,activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值,而Manifest中配置的orientation是活动的默认方向,但实际方向可能会根据设备和用户的操作而改变。

Android屏幕朝向

ORIENTATION_UNDEFINED:未指定
ORIENTATION_PORTRAIT:竖屏
ORIENTATION_LANDSCAPE:横屏
ORIENTATION_SQUARE:正方形

/** Constant for {@link #orientation}: a value indicating that no value has been set. */
public static final int ORIENTATION_UNDEFINED = 0;
/** Constant for {@link #orientation}, value corresponding to the
 * <a href="{@docRoot}guide/topics/resources/providing-resources.html#OrientationQualifier">port</a>
 * resource qualifier. */
public static final int ORIENTATION_PORTRAIT = 1;
/** Constant for {@link #orientation}, value corresponding to the
 * <a href="{@docRoot}guide/topics/resources/providing-resources.html#OrientationQualifier">land</a>
 * resource qualifier. */
public static final int ORIENTATION_LANDSCAPE = 2;
/** @deprecated Not currently supported or used. */
@Deprecated public static final int ORIENTATION_SQUARE = 3;

官方

android:screenOrientation

Activity 在设备上的显示方向。如果 activity 是在多窗口模式下运行,则系统会忽略该属性。在 Android 12(API 级别 31)及更高版本中,设备制造商可以将个别设备屏幕(例如,平板电脑大小的可折叠设备屏幕)配置为忽略屏幕方向指定,并强制应用在竖屏模式下垂直展示而在横屏模式下以信箱模式展示,这样便可保持应用所需的固定宽高比,但又能调整应用的屏幕方向以便用户更好地使用。

landscape(常用)	屏幕方向为横向(显示的宽度大于高度)。
portrait(常用)	屏幕方向为纵向(显示的高度大于宽度)。
sensor(常用)	屏幕方向由设备方向传感器决定。显示方向取决于用户如何手持设备,它会在用户旋转设备时发生变化。但在默认情况下,一些设备不会旋转为所有四种可能的方向。如要支持所有这四种方向,请使用 "fullSensor"。即使用户锁定基于传感器的旋转,系统仍可使用传感器。
fullSensor(常用)	屏幕方向由使用 4 种方向中任一方向的设备方向传感器决定。这与 "sensor" 类似,不同之处在于无论设备在正常情况下使用哪种方向,该值均支持所有 4 种可能的屏幕方向(例如,一些设备正常情况下不使用反向纵向或反向横向,但其支持这些方向)。API9 新增
unspecified	默认值。由系统选择方向。在不同设备上,系统使用的政策以及基于政策在特定上下文中所做的选择可能会有所差异。
behind	与 Activity 栈中紧接其后的 Activity 的方向相同。
reverseLandscape	屏幕方向是与正常横向方向相反的横向。API9 新增
reversePortrait	屏幕方向是与正常纵向方向相反的纵向。API9 新增
sensorLandscape	屏幕方向为横向,但可根据设备传感器调整为正常或反向的横向。即使用户锁定基于传感器的旋转,系统仍可使用传感器。API9 新增
sensorPortrait	屏幕方向为纵向,但可根据设备传感器调整为正常或反向的纵向。即使用户锁定基于传感器的旋转,系统仍可使用传感器。API9 新增
userLandscape	屏幕方向为横向,但可根据设备传感器和用户首选项调整为正常或反向的横向。API18 新增
userPortrait	屏幕方向为纵向,但可根据设备传感器和用户首选项调整为正常或反向的纵向。API18 新增
nosensor	确定屏幕方向时不考虑物理方向传感器。系统会忽略传感器,因此显示内容不会随用户手持设备的方向而旋转。
user	用户当前的首选方向。
fullUser	如果用户锁定基于传感器的旋转,则其行为与 user 相同,否则,其行为与 fullSensor 相同,并且支持所有 4 种可能的屏幕方向。API18 新增
locked	将屏幕方向锁定为其当前的任意旋转方向。API18 新增

注意:如果您声明其中一个横向或纵向值,则系统会将其视为对 activity 运行方向的硬性要求。 因此,您声明的值支持通过 Google Play 等服务进行过滤,这样只有支持 activity 规定方向的设备才能使用您的应用。例如,如果您声明 “landscape”、“reverseLandscape” 或 “sensorLandscape”,则您的应用只能供支持横向方向的设备使用。

此外,您还应通过 元素(例如 )明确声明,您的应用要求采用纵向还是横向方向。这是 Google Play(以及其他支持过滤的服务)提供的一种过滤行为,平台本身并不能控制是否可在仅支持某种方向的设备上安装您的应用。

android:configChanges

列出 activity 将自行处理的配置变更。在运行时发生配置变更时,默认情况下会关闭 activity 并将其重启,但使用该属性声明配置将阻止 activity 重启。相反,activity 会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。

注意:请仅在特殊情况下使用此属性,以提高应用性能和响应速度。如需了解详情,请参阅处理配置更改。

下列字符串是该属性的有效值。若有多个值,则使用 | 进行分隔,例如 “locale|navigation|orientation”。

“density” 显示密度的更改,例如当用户指定不同的显示比例或其他屏幕当前处于活跃状态时。 在 API 级别 24 中引入。

“fontScale” 字体缩放比例的更改,例如当用户选择新的全局字体大小时。
“keyboard” 键盘类型的更改,例如当用户插入外接键盘时。
“keyboardHidden” 键盘无障碍功能的更改,例如当用户显示硬件键盘时。
“layoutDirection” 布局方向的更改,例如从由左到右 (LTR) 改为由右到左 (RTL)。 在 API 级别 17 中引入。
“locale” 语言区域的更改,例如当用户选择显示文本所用的新语言时。
“mcc” 当系统检测到用于更新 MCC 的 SIM卡时,IMSI 移动设备国家/地区代码 (MCC) 发生的更改。
“mnc” 当系统检测到用于更新 MNC 的 SIM 卡时,IMSI移动网络代码 (MNC) 发生的更改。
“navigation” 导航类型(轨迹球或方向键)的 TA 更改。通常不会出现这种情况。
“orientation” 屏幕方向的更改,例如用户旋转设备时。

注意:如果应用面向 Android 3.2(API 级别 13)或更高版本的系统,则还应声明 “screenLayout” 和 “screenSize” 配置,因为当设备在纵向模式与横向模式之间切换时,屏幕布局和屏幕大小可能会发生变化。

“screenLayout” 屏幕布局的更改,例如在其他屏幕变为活动状态时。
“screenSize” 当前可用屏幕尺寸的更改。该值表示目前可用尺寸相对于当前宽高比的变更,当用户在横向模式与纵向模式之间切换时,它便会发生变更。在 API 级别 13 中引入。
“smallestScreenSize” 实体屏幕尺寸的更改。该值表示与方向无关的尺寸变更,因此它只有在实际物理屏幕尺寸发生变更(如切换到外部显示器)时才会变化。对此配置所作变更对应 smallestWidth 配置的更改。在 API 级别 13 中引入。
“touchscreen” 触摸屏的更改。通常不会出现这种情况。
“uiMode” 界面模式的更改,例如当用户将设备放到桌面或车载基座上时,或者夜间模式发生变化时。如需了解有关不同界面模式的更多信息,请参阅UiModeManager。 在 API 级别 8 中引入。

所有这些配置变更都可能影响应用所看到的资源值。因此,调用 onConfigurationChanged() 时,通常必须再次检索所有资源(包括视图布局和可绘制对象),才能正确处理更改。

注意:如要处理所有多窗口模式相关的配置变更,请使用 “screenLayout” 和 “smallestScreenSize”。Android 7.0(API 级别 24)或更高版本的系统支持多窗口模式。

方法 onConfigurationChanged

在这里插入图片描述
Called by the system when the device configuration changes while your activity is running. Note that this will only be called if you have selected android:configChanges you would like to handle with the R.attr.configChanges attribute in your manifest. If any configuration change occurs that is not selected to be reported by that attribute, then instead of reporting it the system will stop and restart the activity (to have it launched with the new configuration).
At the time that this function has been called, your Resources object will have been updated to return resource values matching the new configuration.

方法 onSaveInstanceState

在这里插入图片描述
**Called to retrieve per-instance state from an activity before being killed so that the state can be restored in onCreate(Bundle) or onRestoreInstanceState(Bundle) (the Bundle populated by this method will be passed to both).

This method is called before an activity may be killed so that when it comes back some time in the future it can restore its state. For example, if activity B is launched in front of activity A, and at some point activity A is killed to reclaim resources, activity A will have a chance to save the current state of its user interface via this method so that when the user returns to activity A, the state of the user interface can be restored via onCreate(Bundle) or onRestoreInstanceState(Bundle).

The default implementation takes care of most of the UI per-instance state for you by calling View.onSaveInstanceState() on each view in the hierarchy that has an id, and by saving the id of the currently focused view (all of which is restored by the default implementation of onRestoreInstanceState(Bundle)). If you override this method to save additional information not captured by each individual view, you will likely want to call through to the default implementation, otherwise be prepared to save all of the state of each view yourself.

If called, this method will occur after onStop() for applications targeting platforms starting with Build.VERSION_CODES.P(28). For applications targeting earlier platform versions this method will occur before onStop() and there are no guarantees about whether it will occur before or after onPause().**

方法 onRestoreInstanceState

在这里插入图片描述

This method is called after onStart() when the activity is being re-initialized from a previously saved state, given here in savedInstanceState. Most implementations will simply use onCreate(Bundle) to restore their state, but it is sometimes convenient to do it here after all of the initialization has been done or to allow subclasses to decide whether to use your default implementation. The default implementation of this method performs a restore of any view state that had previously been frozen by onSaveInstanceState(Bundle).

This method is called between onStart() and onPostCreate(Bundle). This method is called only when recreating an activity; the method isn’t invoked if onStart() is called for any other reason

Configuration

处理配置变更

某些设备配置可能会在应用运行期间发生变更。这些变更包括但不限于:

  • 应用显示大小
  • 屏幕方向
  • 字体大小和粗细
  • 语言区域
  • 深色模式与浅色模式
  • 键盘可用性

其中大部分配置变更都是由某些用户互动触发的。例如,旋转或折叠设备会改变应用可用的屏幕空间量。同样,更改设备设置(例如字体大小、语言或首选主题)也会改变 Configuration 对象中的相应值。

注意:在平板电脑、可折叠设备或 ChromeOS 设备等大屏设备中,连接或断开外设以及多任务处理都是更加常见的场景。这些设备非常灵活,因此也会更加频繁地发生配置变更。

这些参数通常需要对应用界面进行充分的更改。因此,Android 平台提供了一种专有机制来处理这种更改。这种机制就是 Activity 重新创建。

activity 重新创建

当发生配置变更时,系统会重新创建 Activity。为此,系统会调用 onDestroy() 并销毁现有的 Activity 实例。随后,系统会使用 onCreate() 创建一个新实例,并且这个新的 Activity 实例会使用更新后的新配置进行初始化。这也意味着,系统还会使用新配置重新创建界面。
重新创建行为会自动利用与新设备配置相匹配的备用资源来自动重新加载应用,从而帮助它适应新配置。

重新创建示例

假设有这样一个 TextView,它使用布局 XML 文件中定义的 android:text=“@string/title” 来显示静态标题。创建视图后,视图会根据当前语言来准确设置文本一次。如果语言发生更改,系统会重新创建 activity。因此,系统还会重新创建该视图,并根据新语言将其初始化为正确的值。
重新创建过程还会清除您在 Activity 或其包含的 Fragment、View 或其他对象中,以字段形式保留的任何状态。这是因为 Activity 重新创建过程会创建 Activity 和界面的全新实例。此外,之前的旧 Activity 不再可见或不再有效,因此对该 activity 或其所含对象的任何其余引用都已过时。它们会导致 bug、内存泄漏和崩溃。

注意:因配置变更而重新创建 Activity,只是系统销毁 Activity 并在稍后重新创建 activity 的情形之一。如需了解详情,请参阅 Activity 生命周期。

配置变更:关键概念和最佳实践

在处理配置变更时,您需要了解以下关键概念:

  • 配置:设备配置用于定义界面如何向用户显示内容,例如应用显示大小、语言区域或系统主题。
  • 配置变更:配置会根据用户互动发生变更。例如,用户可能会更改设备设置或与设备的物理互动方式。您无法阻止配置变更。
  • Activity 重新创建:默认情况下,配置变更会导致重新创建 Activity。这是为新配置重新初始化应用状态的内置机制。
  • Activity 销毁:Activity 重新创建会导致系统销毁旧的 Activity 实例,并创建一个新实例来代替它。旧实例现已过时。对该实例的任何其余引用都会导致内存泄漏、bug 或崩溃。
  • 状态:旧 Activity 实例中的状态不存在于新 Activity 实例中,因为它们是两个不同的对象实例。请按照保存界面状态中描述的方法保留应用和用户状态。
  • 停用:为某种类型的配置变更停用 activity 重新创建功能是一种潜在的优化方案。您需要确保应用根据新配置进行正确更新。

为了提供良好的用户体验,请遵循以下最佳实践:
为配置频繁变更做好准备:不要认为配置变更会很少发生或从不发生过,无论 API 级别、外形规格或界面工具包如何。当用户导致配置变更时,他们会希望应用进行更新,并继续使用新配置正常运行。
保留状态:在重新创建 Activity 时,不要丢失用户的状态。请按照保存界面状态中描述的方法保留状态。
避免停用快速修复功能:不要停用 Activity 重新创建功能,这样可以轻松避免丢失状态。停用 activity 重新创建功能需要实现处理变更的承诺,而您可能会因为其他配置变更、进程终止或应用关闭所带来的 Activity 重新创建而丢失状态。因此,您无法完全停用 Activity 重新创建功能。请按照保存界面状态中描述的方法保留状态。
不要回避配置变更:不要为了回避配置变更和 Activity 重新创建,而对屏幕方向、宽高比或尺寸可调整性施加限制。这会对想要按照自己首选方式使用应用的用户产生负面影响。

代码中动态切换横竖屏

在代码中切换屏幕的方向主要调用 setRequestedOrientation(int requestedOrientation) 方法,此方法的作用等同于在 AndroidManifest.xml 设置的 android:screenOrientation。

注意: 通过 setRequestedOrientation 修改了屏幕方向后,就类似于设置了 android:screenOrientation,效果是一样的。比如:调用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) 后,无论屏幕怎么旋转,都不会切换屏幕方向。如果要恢复为响应横竖屏随物理方向传感器设备变换,那么就需要手动调用类似 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)代码进行恢复。(效果类似,但是通过packageManager的结果非代码动态设置朝向)

适用场景:如果我们应用是手机和平板都可用的,但是手机上只能是竖屏不可切换,平板上只能是横屏不可切换,那么就可以在区分设备是手机还是平板后,在BaseActivity的onCreate方法中通过setRequestedOrientation设置屏幕方向。

重启模式下的屏幕适配

重启模式下,如果大家在资源目录 res 中添加了 layout-land(横向布局文件夹) 和 layout-port(竖想布局文件夹),重启 Activity 模式的横竖屏切换,系统会自动帮我们显示正确方向的布局 UI。

非重启模式下的屏幕适配

非重启 Activity 模式下横竖屏切换时,我们的 Activity 不会销毁重建,数据也不会丢失。所以,如果按照上面的方式,在资源目录 res 中添加 layout-land 和 layout-port,会发现并没有效果,此时应该怎么做呢?

其实也很简单,只需要在onConfigurationChanged中再掉一次setContentView即可。

参考连接

横竖屏切换 屏幕适配 状态保存与恢复

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

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

相关文章

【STM32】学习笔记(EXTI)-江科大

EXTI外部中断 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#x…

【Python数据分析】数据分析之numpy基础

实验环境&#xff1a;建立在Python3的基础之上 numpy提供了一种数据类型&#xff0c;提供了数据分析的运算基础&#xff0c;安装方式 pip install numpy导入numpy到python项目 import numpy as np本文以案例的方式展示numpy的基本语法&#xff0c;没有介绍语法的细枝末节&am…

电商数仓项目需求及架构设计

一、项目需求 1.用户行为数据采集平台搭建 2.业务数据采集平台搭建 3.数仓维度建模 4.统计指标 5.即席查询工具&#xff0c;随时进行指标分析 6.对集群性能进行监控&#xff0c;发生异常时报警&#xff08;第三方信息&#xff09; 7.元数据管理 8.质量监控 9.权限管理&#xff…

streamlit-API

介绍 安装 pip install streamlit运行 streamlit run your_script.py [-- script args]数据流 多页应用程序 API 文本元素 数据元素 图标元素 输入小部件 媒体元素 布局和容器 聊天元素 st.chat_message st.chat_input 显示进度和状态 控制流 占位符/帮助/选项 图表改变 会…

SpringBoot工具类—基于定时器完成文件清理功能

直接复制粘贴既可&#xff01;&#xff01; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOff…

云职达(上海)岗前实训基地(上海云职达):致力为企业提供良好的数字化解决方案

上海云职达全称&#xff1a;云职达上海信息科技有限公司&#xff0c;是一家致力于推动算力产业发展的企业。随着数字经济时代的到来&#xff0c;算力作为数字产业化和产业数字化转型的关键支撑&#xff0c;已经成为推进中国式现代化的重要驱动力量。云职达深入理解算力产业的重…

星辰天合荣获“2023年度优秀光伏行业数字化供应商”

8 月 28 日&#xff0c;由 OFweek 维科网及旗下权威的光伏专业媒体-维科网光伏共同举办的“OFweek 2023&#xff08;第十四届&#xff09;太阳能光伏产业大会暨光伏行业年度颁奖典礼”在深圳成功举办。 星辰天合凭借在光伏领域的优秀智能存储解决方案&#xff0c;以及大量的应用…

Rdedis 持久化

Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能&#xff01; 一、RDB&#xff08;Redis DataBase&#xff09; 1.1 概念 在指定的时间间隔内…

冠达管理:2023股票交易新规则详解?股票手续费包括哪些?

投资者进行股票投资时不是随便就可以进行生意的&#xff0c;需求恪守一定的生意规则&#xff0c;才干顺利成交。那么2023股票生意新规则详解&#xff1f;股票手续费包含哪些&#xff1f;下面就由冠达管理为大家分析&#xff1a; ​ 2023股票生意新规则详解&#xff1f; 1、约…

EDFHG-04-200-3C2-XY-31T001电液比例大流量调速阀放大器

EDFHG-03-100-3C40-XY-30T、EDFHG-03-100-3C2-XY-30T、EDFHG-04-140-3C40-XY-30T、EDFHG-04-140-3C2-XY-30T、EDFHG-06-140-3C40-XY-30T、EDFHG-06-140-3C2-XY-30T、EDFHG-04-200-3C2-XY-31T001、EDFHG-06-400-3C2-XY-31T001、EDFHG-06-400-3C40-XY-31T001电液比例换向调速阀采…

vue3 ref reactive响应式数据 赋值的问题

文章目录 vue3 ref reactive响应式数据 赋值的问题场景1:将响应式数据赋值请求后的数据错误示范&#xff1a;直接赋值正确写法 场景2&#xff1a;响应式数据解构之后失去响应式原因分析解决办法 toRefs/toRef方法创建ref引用对象 vue3 ref reactive响应式数据 赋值的问题 doing…

云备份——项目介绍

一&#xff0c;项目基本介绍 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。并且能够随时通过浏览器进行查看并且下载&#xff0c;其中下载过程支持断点续传功能&#xff0c;而服务器也会对上传文件进行热点管理&#xff0c;将非热点文件进行压缩存储&…

在springboot中配置mybatis(mybatis-plus)mapper.xml扫描路径的问题

我曾经遇到过类似问题&#xff1a; mybatis-plus的mapper.xml在src/main/java路径下如何配置pom.xml和application.yml_idea 把mapper文件放到java下如何配置_梓沂的博客-CSDN博客 当时只是找到解决问题的办法&#xff0c;但对mybatis配置来龙去脉并未深入了解&#xff0c;所…

无意间发现这款可以免费制作3D翻页电子画册的网站

在博主努力的搜寻下&#xff0c;无意间发现这个网站&#xff0c;可以免费制作3D翻页电子画册。使用这个网站非常简单&#xff0c;只需上传你想要展示的图片和添加相应的文字&#xff0c;然后选择合适的模板和风格。接下来&#xff0c;就会自动转化成漂亮的3D翻页画册 工具嘛&am…

《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌全栈环境IDX,微软在Excel推出Python

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1ju4y1D7A8/ 《安富莱嵌入式周报》第321期&#xff1a;开源12导…

天津web前端培训机构 Web开发是做什么的?

随着互联网和移动互联网的快速发展&#xff0c;越来越多的企业开始注重自身网站和应用程序的用户体验和设计&#xff0c;而这些方面正是Web前端开发人员所擅长的领域。Web前端不仅招聘市场需求量大&#xff0c;还有一个重要的原因就是&#xff0c;入行门槛低&#xff0c;入门简…

A+CLUB管理人支持计划第七期 | 吾执投资

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&…

学校食堂之间究竟有多大差距?这个技巧很重要

随着科技的不断发展&#xff0c;智能系统在各个领域展现出了巨大的潜力和影响力&#xff0c;其中&#xff0c;智慧收银系统在学校食堂的应用正逐渐成为一种趋势。 智慧收银系统不仅为食堂管理者提供了更好的决策依据&#xff0c;也为家长提供了更详细的消费信息&#xff0c;促进…

8.29day49

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 知识点&#xff1a;1.dp数组含义 dp[i][0] 表示 持有该i个股票的最大值 dp[i][1] 表示不持有的最大值 2.递推公式&#xff1a;1.持有股票 dp[i][0]Max(dp[i-1][0]&#xff08;上一个状态&#xff09;,-price[…

数字证书有什么作用,为什么要用数字证书?

数字证书是一种用于加密和验证数据的安全工具&#xff0c;它在现代通信和互联网领域起着重要的作用。下面安策给大家介绍一下数字证书的几个主要作用和为什么要使用数字证书的原因&#xff1a; 身份认证&#xff1a;数字证书可用于在线交互中验证身份。通过使用证书进行身份认证…