- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试更好地理解配置更改和实例状态。
现在我知道旋转屏幕等操作被视为配置更改,它会破坏并重新创建 Activity。有时这意味着如果您不小心,您可能会丢失值(例如,如果您有一个数字列表,当您旋转屏幕时,这些数字会重置为全 0)。
通常有一些方法可以使用,例如 onSaveInstanceState
或 onRestoreInstanceState
,或者在 中检查
方法等——用于保存和恢复值,这样您就不会在发生变化时丢失任何东西。savedInstanceState
是否为 null >onCreate
我的问题:
是否需要考虑多种类型的配置更改?例如,如果我的应用即使在屏幕旋转的情况下也能按预期工作,这是否也意味着它会继续并按预期运行其他形式的配置更改?
我如何知道应该将哪些变量保存到我的实例状态变量中,以及在发生配置更改时自动保留哪些变量?将所有成员变量存储在 onSaveInstanceState
中的实例状态,然后在 onRestoreInstanceState
中重新应用它们是否是一种好的做法?
最佳答案
For example if I get my app to work as expected even with screen rotations, does this also imply that it will carry over and act as expected with other forms of configuration changes?
一般来说,是的。我更愿意将其表述为:一个实现良好的配置更改方法将处理所有可能的配置更改。
因此,例如,如果用户运行您的应用程序,按 HOME,进入设置,更改他们的语言环境,然后通过概览屏幕(又名,最近任务列表)返回您的应用程序,您的最上面的 Activity 将进行配置更改。这里的目标是让您加载新的字符串资源和内容,以反射(reflect)新选择的语言。但是,如果您在保存的实例状态 Bundle
中保存一些面向用户的字符串,并在新 Activity 中简单地使用该字符串——而不是再次调用 getString()
——那么你将具有来自旧语言的值。
许多开发人员只想到方向变化。 通常,如果您处理方向更改,则所有其他配置更改都是“免费”处理的。但是,情况并非总是如此,这就是为什么您需要仔细考虑。
How do I know which variables I should be saving into my instance state variable and which will be auto-preserved when a configuration change takes place?
“自动保留”的主要内容是:
用于启动 Activity 的Intent
UI 小部件中的用户可变状态(例如,EditText
中的文本)...假设您没有覆盖 onSaveInstanceState()
或链接到父类(super class)实现
如果您正在使用 fragment ,您的 fragment 将在配置更改时保留(即,使用相同的实例)或重新创建(即,使用相同类的新实例)。
不会自动处理的是您 Activity 的任何字段/数据成员。那些你需要决定的:
这是我需要在配置更改时保留的东西,还是它只是一个缓存,用于在新 Activity 中重建某些东西?
这是我可以合理地放入保存的实例状态 Bundle
中的东西,还是它的大小(例如,Bitmap
)或数据类型(例如,Socket
) 不能以这种方式固定?对于这些,除了保存的实例状态 Bundle
(保留 fragment 、持久化数据等)之外,您还需要追求其他技术。
关于android - Android 中的配置更改以及在实例状态中保存哪些变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36407482/
我只是不喜欢 Logback 的 XML 或 Groovy 配置,而更喜欢用 Java 进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置)。 似乎对 Logback 进行 Java 配置的
我的 sphinx 配置是: ================================ config/sphinx.yml development: bin_path: "/usr/loc
我们计划在生产服务器中部署我们的系统。我有兴趣了解更多有关优化网站性能的信息。 Sitecore 有哪些优化建议? (缓存,网络配置中的其他设置) 我们可以在 IIS 中做哪些优化? 找不到关于这些主
我有一个 Django 应用程序,可以处理网站的两个(或更多)部分,例如网站的“admin”和“api”部分。我还为网站的其余部分提供了普通的 html 页面,其中不需要 Django。 例如,我希望
我刚刚开始研究Docker。我有一个 Node 应用程序,可以调整大小和图像,然后在完成后向 aws 发送 SQS 消息。我已成功创建应用程序的 docker 镜像,并从本地计算机复制它,但遇到了无法
如何配置 checkstyle(在 Ant nt Maven 中)任务?我尝试了一点,但没有正确收到报告。这是我的 Ant 脚本。
我正在使用 Quartz 和 Spring 框架重写一个遗留项目。原始配置是 XML 格式,现在我将其转换为 Java Config。 xml 配置使用 jobDetail 设置触发器 bean 的作
tl;rd: 使用主键对数据库进行分区 索引大小问题。 数据库大小每天增长约 1-3 GB 突袭设置。 您有使用 Hypertable 的经验吗? 长版: 我刚刚建立/购买了一个家庭服务器: 至强 E
在安装 gcp 应用程序后,我们尝试使用 GCP 的图形 api 配置 Azure Active Directory saml 配置。我们正在遵循相同的 AWS graph api saml 设置 U
我刚刚了解了 spring security 并想使用 java hibernate 配置连接到数据库,但我发现的示例或教程很少。我通过使用 xml 配置找到了更多。我在这里使用 Spring 4.0
我们最近切换到 Java 8 以使用 java.time API(LocalDate、LocalDateTime,...)。因此,我们将 Hibernate 依赖项更新到版本 4.3.10。我们编写了
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus实战》系列的第六篇,咱
我是 NGINX 的新手,我正在尝试对我们的 ERP 网络服务器进行负载平衡。我有 3 个网络服务器在由 websphere 提供支持的端口 80 上运行,这对我来说是一个黑盒子: * web01.e
我们想使用 gerrit 进行代码审查,但我们在 webview 中缺少一些设置。 是否可以禁止提交者审查/验证他们自己的 提交? 是否有可能两个审稿人给 +1 一个累积它 到+2,以便可以提交? 谢
配置根据运行模式应用于 AEM 实例。在多个运行模式和多个配置的情况下,AEM 如何确定要选择的配置文件?假设以下配置在 AEM 项目中可用, /apps /myproject - con
我正在使用 Neo4j 服务器。我遇到了负载相对较低的问题。但是,响应时间相当长。我认为为请求提供服务的线程数太少了。有没有办法调整为 HTTP 请求提供服务的线程池的大小。那可能吗? 最佳答案 线程
我在/etc/default/celeryd 中有以下配置 CELERYD_NODES = "worker1 worker2 worker3" CELERYD_CHDIR = "path to pro
Plone 在其页面中显示来 self 的母语(巴西葡萄牙语)的特殊字符。但是,当我使用我创建的 spt 页面时,它会显示转义序列,例如: Educa\xc3\xa7\xc3\xa3o 代替 Educ
我正在尝试开始使用 Emacs/Clojure。安装 emacs 扩展的正确方法是什么。我正在尝试安装以下插件: https://bitbucket.org/kotarak/vimclojure 我已
我有一个简单的 C 项目结构: proj/ src/ docs/ build/ tests/ lib/ 尝试编写合适的 CMake 文件。 到目前为止我的尝试:http://pas
我是一名优秀的程序员,十分优秀!