【发布时间】:2010-04-20 16:34:06
【问题描述】:
所以在我的应用程序中有一个用于创建新用户的表单,其中包含有关用户的相关详细信息和信息。那里没有问题,这只是当用户离开活动而不按确认按钮时发生的情况。
这是我想做的:
- 如果用户按下后退按钮,尝试将所有数据保存到数据库并通知用户。
- 如果活动被中断(即通过电话),将所有数据保存到一个临时位置,这样当活动再次位于堆栈顶部时,似乎没有任何变化(但数据仍然没有尚未保存到数据库中)。
- 如果 Activity 在后台被杀死以获得更多资源,请执行上述第 2 点相同的操作(即当 Activity 再次启动时,似乎没有任何变化)。
- 如果整个应用程序重新启动(通过再次单击图标)并且存储了来自上述第 2 点或第 3 点的临时数据,请导航到“创建用户”活动并显示数据,就好像没有任何变化一样。李>
这是我目前正在尝试的方式:
- 使用
onDestroy()和isFinishing()函数查找Activity 何时被终止,以涵盖上面的第1 点(然后尝试保存所有数据)。 - 使用
onSaveInstanceState将所有数据保存到一个包中(以涵盖上面的第 2 点) - 使用
onSaveInstanceState创建的包是否能够在被杀死以获得更多资源的活动中幸存下来,因此在重新创建它时可以检索到以前的状态(如上面的第 3 点)? - 不知道如何实施第 4 点。
任何帮助将不胜感激。
干杯!
【问题讨论】:
-
你确定是 3 和 4 吗?当用户离开很长时间时,无论activity是否被杀死,系统都会重置你的任务堆栈并清除信息,这是标准的Android行为,所以用户期待这一点。也许比在这方面与系统抗争更好的计划是减少单个屏幕上不可保存的信息量或重新设计流程以便可以保存所有内容 onPause() ——也许有一个屏幕来创建带有他们名字的用户,这只节省了点击“创建”按钮,然后是第二个屏幕来输入详细信息,所有这些都保存 onPause()。
-
对于第 3 点和第 4 点,我想当消息保存为草稿时,我正在尝试复制消息应用程序。尽管仅使用用户名和其他基本详细信息将信息切割成活动,但在另一个页面中使用其他选项似乎是有益的。谢谢。