7

是否应该通过光标获取数据并在屏幕上填写数据,例如设置窗口标题,在onStart()或中onResume()

onStart()似乎是合乎逻辑的地方,因为在onStart()Activity 已经可以显示之后,尽管在后台。值得注意的是,我在管理对话方面遇到了问题,这让我重新考虑了这一点。如果用户在对话框仍然打开时旋转屏幕,onCreateDialog()并且在和之间onPrepareDialog()调用。如果对话框需要基于你需要的数据之前的数据。 onStart()onResume()onResume()

如果我是正确的,onStart()那么为什么记事本示例会给出一个不好的示例onResume()呢?请参阅http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html NoteEditor.java 第 176 行 ( title = mCursor.getString...)。

此外,如果我的 Activity 启动另一个 Activity/Dialog 来更改我的光标正在跟踪的数据怎么办。即使在最简单的情况下,这是否意味着我必须手动更新我以前的屏幕(主要活动中对话框的侦听器),或者我必须注册一个 ContentObserver,因为我不再更新数据onResume() (当然我可以更新两次)?

我知道这是一个基本问题,但令我惊讶的是,直到最近的对话才让我意识到这一点。

4

2 回答 2

3

同样,解决方案取决于适合您的方式。

如果您希望每个应用程序预填充一次光标(并且不担心任何更改,那么您可以在 onCreate() 中执行此操作。仅当应用程序进程被终止并重新启动应用程序时才会调用此方法。

如果您希望每次可见生命周期开始时都预先填充光标(大多数情况下服务/广播正在调用您的活动,您应该使用 onStart()

如果您希望为每个活动的前台生命周期预先填充光标,您应该使用 onResume()。因此,如果您有一个对话框或另一个子活动正在修改某些信息,因此您想重新加载光标,最好在 onResume() 中这样做。此方法的缺点是每次活动进入前台时都会重新加载光标。

希望这说明清楚

于 2011-01-09T00:48:54.223 回答
2

要回答您关于 NoteEditor 的问题,只需查看您引用的行上方的行,您就会看到...

    // Requery in case something changed while paused (such as the title)
    mCursor.requery();

评论似乎说明了一切。虽然我自己没有经历过记事本示例,但似乎作者正在建立在 NoteEditor 暂停(然后恢复)时从更改中恢复的能力。

正如 GSree 解释的那样(当我输入这个时),没有正确或错误的答案,它只取决于在 Activity 生命周期的哪个点需要做什么。

于 2011-01-09T00:54:29.870 回答