onSaveInstanceState()和onPause()

dat*_*nly 26 android

我对Android中的这两种方法有点困惑.

从我理解的文档中,onSaveInstanceState()应该调用它来仅存储临时信息,并且onPause()应该用于存储任何持久性数据.

我想知道为什么要打电话onSaveInstance(),onPause()每次都打电话.然后我在记事本教程中阅读:

"请注意,saveState()必须在两者中调用onSaveInstanceState()onPause()确保保存数据.这是因为无法保证 onSaveInstanceState()将被调用,因为在调用它时,它会被调用onPause()."

无法保证onSaveInstanceState()将被调用,因为您可以使用后退按钮简单地走出活动.

但是根据这个,如果你不在两个方法中保存持久数据,那么应用程序可能会在内部被杀死onSaveInstanceState().

所以我们需要实际保存两种方法中的持久数据,对吗?

但是,如果这是真的,这不是太多的开销,也许应该有一些其他额外的标志来告诉方法是否已被调用或什么?

http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html

Cos*_*min 20

来自开发者指南的活动:

注意:因为无法保证调用onSaveInstanceState(),所以您应该仅使用它来记录活动的瞬态(UI的状态) - 您永远不应该使用它来存储持久数据.相反,您应该使用onPause()来存储用户离开活动时的持久数据(例如应保存到数据库的数据).

  • 现在不保证会调用onSaveInstanceState(),这简直是疯了!那为什么还要麻烦呢? (4认同)

Hei*_*upp 11

onSaveInstanceState()"配置改变"意味着"记住"当配置改变发生时的当前状态,例如屏幕方向改变.这不是"长期持久性"的意思.

在记事本示例中,这两种情况可能相同.在其他应用程序中,例如Twitter客户端,数据本身可以持久保存在后台服务中.在onCreate()一些项目中从DB中拉出并显示,例如记住当前位置.当发生方向改变时,可以记住该"当前位置",onSaveInstanceState()并且在onCreate()方位改变之后用于显示用户上次查看的消息之后.

另见本指南.