我有一个以编程方式创建EditText视图的应用程序。我使用setId()为该视图分配一个ID
myEditText.setId(100);这样,Android会在暂停/停止应用程序时自动保存该对象的状态(正如我建议的那样,这里)。It 在以下情况下工作:
Bundle恢复活动)。对象状态也保持不变。但是,在这种情况下,它的不工作:
EditText对象是空的。对为什么会发生这种情况有何解释?Android真的区分了使用"Home“和"Back”的应用程序吗?根据文档,即使活动被销毁,也应该通过Bundle自动保存对象的状态。这显然发生在(2)的情况下。但在第三种情况下就不行了!
如果这是正常行为,当用户按“回”键时,我怎么能让应用程序的状态自动保存和恢复呢?我知道我可以用SharedPreferences来做这个,但我宁愿让机器人自动完成,就像在(1)和(2)情况下一样。
这种情况至少发生在Android4.0和4.2中(我还没有测试过其他人)。
发布于 2013-12-21 18:10:17
我想我找到了解释。我只需要更仔细地阅读文档(感谢@lentz获得其中一个链接);请参阅这里和这里
当您的活动因用户按回或活动完成而被破坏时,系统对该活动实例的概念将永远消失,因为该行为表明不再需要该活动。 如果用户按后退按钮,当前活动将从堆栈中弹出并销毁。堆栈中的前一个活动将继续进行。当活动被破坏时,系统不会保留该活动的状态。
以上解释了我问题中的行为(3)。
但是,如果系统由于系统约束(而不是正常的应用程序行为)而破坏活动,那么尽管实际的活动实例已经消失,但系统会记住它的存在,即如果用户导航回它,系统将使用一组保存的数据创建活动的新实例,该数据描述活动被销毁时的状态。系统用于恢复以前状态的保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。
以上可能解释了行为(1)和(2)。
我不明白为什么应该将用户按回按解释为“不再需要活动”(“不需要保留其状态”)。但那是另一回事。
https://stackoverflow.com/questions/20720874
复制相似问题