- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
试图决定(针对我的应用程序)在 onPause() 中保存什么以及要保存在 onSaveInstanceState() 中的内容,我梳理了整个 SO 以获得提示和明确的指导方针。
如果我没理解错的话,onSaveInstanceState()最适合保存“运行时更改”或“当前状态”(无论是什么意思),而 onPause()最适合保存“持久状态”(无论这意味着什么)。
我仍然难以决定在我的应用程序中什么构成“持久状态”与“当前状态”。例如,虽然用户偏好显然是持久性的,但当用户更改它们时它们总是由 Android UI 框架自动保存时,我是否需要将它们保存在 onPause()
中?
类数据成员是否需要保存在onSaveInstanceState()中? ?我是否需要为应用程序中的每个 类执行此操作?
我很困惑。
你能举出真实世界的例子来说明什么必须保存在 onPause()
中以及什么必须保存在 onSaveInstanceState()
中吗? Except用于设备配置更改,即。
--
一些新见解,在我的问题得到回答后:
Bundle
是not written to anything ,而且它在任何方面都不持久。Bundle
数据只会是held in memory直到申请结束。最佳答案
您不需要在 onPause 中存储用户首选项,因为正如您所说,框架会为您完成。
要区分持久数据与状态信息,请考虑文本编辑器应用程序。
持久数据
假设用户输入了几个词,然后退出了应用。用户没有明确告诉我们将该数据保存到一个文件中,但是当他们回来时将这些数据存储起来肯定会很好。这是持久数据,您想将其存储在 onPause() 中。
状态数据
同样,假设您有 2 个选项卡和一个跟踪当前选择哪个选项卡的变量。这是您将存储在 onSaveInstanceState() 中的状态数据。
灰质
最后假设您在编辑器中有一个类,用于跟踪编辑器中的字符数和行数。这是状态数据,您可以将其存储在 onSaveInstanceState() 中,或者您可以将其丢弃并在再次启动时重新计算它。是否丢弃它可能取决于计算需要多长时间,例如,如果您可以通过存储数据来阻止网络请求,那么就这样做。
进一步的想法
通过试用您的应用程序,您应该可以清楚地知道是否存在您未能存储正确数据的区域。请务必执行诸如按下主页按钮之类的操作,然后从设备管理器中关闭您的应用程序。这将使您能够解决应用关闭而不是暂停的极端情况。
如果您的界面状态在整个生命周期事件中保持一致并且您的用户数据保持不变,那就太好了。
根据评论编辑
我认为这里有 2 个标准来确定何时/保存什么。
第一个是相当主观的——你到底要不要保存数据?确实没有什么强制您保存状态或数据。保存这些信息会带来更好的用户体验吗?如果您正在写一封电子邮件并尝试从另一个应用程序复制/粘贴文本,那么每次关闭该应用程序时丢失您打一半的电子邮件都会令人沮丧。
第二部分,确定要保存什么取决于您是否可以根据您拥有的数据重建您的 UI 状态。例如,如果您保存了文本数据,那么这一定意味着用户正在编辑文本。所以现在我们知道切换到编辑文本选项卡并填写保存的文本。
一般来说,如果您希望将用户返回到他们离开的相同位置,那么您需要考虑返回到该点所需的状态数据。想象一下您的应用程序的原始加载版本
这就是 android 的实际工作方式,您的 Activity 会被销毁并重新创建,您的工作就是让各个部分再次启动(如果您选择这样做)。
关于android - "persistent state"与 "current state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874627/
在 Spring-MVC 应用程序中,我尝试使用 validator 。我将注释 @NotEmpty 和 @Email 放在我的实体之一上,当我尝试验证它时,出现此错误: java.lang.NoSu
网络是我硕士学位的最后一门类(class)。我确实有一个关于如何计算非持久、持久和持久流水线的 http 往返时间的问题。 在花了无数小时阅读有关该问题、从其他大学下载笔记甚至搜索 youtube 视
让我们考虑典型的 订购 和 订单商品 例子。假设 订单商品 是 的一部分订购 聚合,只能通过订单添加。所以,添加一个新的 订单商品 到 订购,我们必须通过 Repository 加载整个 Aggreg
// lookup existing user & set a currently null child entity (ContactInfo) user.setContactInfo(contac
我正在尝试关注 this tutorial .我想我不是从使用可下载项目开始,而是从我之前做过的一个简单的“spring MVC - Maven - eclipse”项目开始。这个项目运行良好。 因此
我正在使用打开 Kubernetes 选项的 docker 应用程序运行 mac OSX Catalina。我使用以下 yaml 和命令创建了一个 PersistentVolume。 apiVersi
假设我有一个类 Employee和一个类Company其中包含 Employee 的 LinkedList对象,我想编写一个添加 Employee 的方法到特定的数据库Company 。我创建了一个新
我实际上正在将我们应用程序的所有组件更新到最新版本。因此,除其他外,我将从 eclipselink-2.5.0 升级到 eclipselink-2.7.3,并从 Tomcat 7 升级到 TomEE。
我试图遵循《用GlassFish 3开始Java EE 6平台》一书第2章中的示例。我正在Windows中使用cmd中的EclipseLink,Derby和Maven。我真的不知道这一点,将不胜感激!
我只是看看ClassGuard (虽然我知道一些 objection )。 但是我得到了 javax.persistence.PersistenceException: [PersistenceUni
我的印象是,如果我们使用持久字段,就不需要 getter 方法,因为实体管理器直接引用实例变量。但是,当我从实体中删除 getter 和 setter 方法以具有持久字段时,未从数据库中检索到相应实例
我正在 Eclipse 中使用 Servlet、JPA、EJB 和 JBoss 进行项目。正如您在我的主题标题中看到的,我的 persistence.xml 文件有错误,但我不知道是哪个:
我已经尝试了一个星期或更长时间来让我的状态在 react native Android 应用程序中持续存在,但在重新水化后状态始终具有初始值。如果我使用 Redux devtools 检查 ASync
什么时候应该坚持,什么时候应该补充水分?命名约定非常困惑,因为作者几乎没有提到它们在 redux-persist 的上下文中的含义。 . 最佳答案 在不真正了解图书馆的情况下: persist = 将
我正在尝试按照老师文档中提供的信息设置一个简单的 jpa 2.0 项目。我已经处理这个问题好几个小时了,但无论我做什么,当我尝试创建 EntityManagerFactory 时,我总是遇到这个异常:
我有一个 Maven 项目,我将其转换为现在可与 Maven 一起使用的 JPA 项目。我的persistence.xml如下: My Persistence Unit
我正在使用 Netbeans 6.8 并构建简单的 Maven Web 应用程序项目。 为持久实体创建实体和主文件 [也创建持久单元] 并使用 EclipsLink。 但是当我运行主文件时出现这个错误
我是 Kubernetes 的新手,我很难理解 Kubernetes 中持久存储背后的整个想法。 这就足够了吗,或者我必须创建持久卷,如果我只部署这两个对象而不创建 PV 会发生什么情况? 存储应该在
我正在尝试使用 JPA 为我目前参与的 Java-EE 项目设置持久性,并且我遇到了许多配置问题。目前,我已经在 persistence.xml 中定义了一个 RESOURCE_LOCAL 持久性单元
Akka 持久性查询通过提供一个通用的基于异步流的查询接口(interface)来补充 Persistence,各种日志插件可以实现该接口(interface)以公开它们的查询功能。 这是来自 akk
我是一名优秀的程序员,十分优秀!