我对Android中的这两种方法有点困惑。
从文档中我了解到,应该只调用onSaveInstanceState()来存储临时信息,并且应该使用onPause()来存储任何持久数据。
当每次调用onSaveInstance()时,我想知道为什么要打电话给onPause()。然后我读了记事本教程:
“请注意,必须在
onSaveInstanceState()和onPause()中同时调用saveState(),以确保数据被保存。这是因为不能保证onSaveInstanceState()将被调用,而且当调用它时,在onPause()之前调用它。”
不能保证onSaveInstanceState()将被调用,因为您可以使用back按钮退出活动。
但是根据这一点,如果您不保存这两种方法中的持久数据,则应用程序可能会在onSaveInstanceState()中被杀死。
所以我们需要在这两种方法中保存持久化数据,对吗?
但是,如果这是真的,这难道不是太大的开销吗?也许还应该有其他一些额外的标志来判断方法是否已经被调用了?
http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html
发布于 2013-02-19 17:16:12
来自activities的开发人员指南
注意:因为不能保证调用onSaveInstanceState(),所以您应该只使用它来记录活动(UI的状态)的瞬态,-you不应该使用它来存储持久数据。相反,当用户离开活动时,您应该使用onPause()存储持久数据(例如应该保存到数据库中的数据)。
发布于 2011-03-02 11:25:11
onSaveInstanceState()的意思是“记住”当配置发生更改时的当前状态,例如屏幕方向的更改。这并不意味着“长期坚持”。
在记事本示例中,这两种情况可能是相同的。在其他应用程序中,例如Twitter客户端,数据本身可以持久化在后台服务中。在onCreate()中,从DB中提取并显示一些项,例如记住当前位置。当发生方向更改时,这个“当前位置”可以在onSaveInstanceState()中记住,稍后在onCreate()中使用该方向更改来显示用户上次查看的消息。
另见this guide。
发布于 2011-03-02 17:51:47
您可以使用onSaveInstanceState中的包将非视图实例状态(“内部状态(如用户首选项)”)保存在onStop中的软杀伤(方向更改)上,并使用首选项在onStop中保存硬杀伤(在我们对焦时返回按钮)。如果您有其他数据(“共享文档--类似于数据--通常使用内容提供者存储在SQLite数据库中”),则应该使用onPause进行此操作。
https://stackoverflow.com/questions/5166201
复制相似问题