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

onStart() 似乎是合乎逻辑的地方,因为之后 onStart() 活动可以是 显示, ,尽管在后台。值得注意的是我有一个问题 托管对话框 这让我重新考虑了这个。如果用户在对话框仍打开时旋转屏幕,则 onCreateDialog()onPrepareDialog() 被称为 之间 onStart()onResume(). 。如果对话框需要基于数据,则需要在 onResume().

如果我正确 onStart() 那为什么 记事本示例 通过这样做一个不好的例子 onResume()?看 http://developer.android.com/resources/samples/notepad/src/src/com/com/example/android/notepad/noteeditor.html Noteeditor.java行176(title = mCursor.getString...).

另外,如果我的活动启动了另一个ActVity/对话框,该ACTVITY/对话框更改我的光标正在跟踪的数据。即使在最简单的情况下,这也意味着我必须手动 更新 我以前的屏幕(主要活动中的对话框的侦听器),或者我必须注册contentObserver,因为我不再在onResume中更新数据(尽管我当然可以两次更新)?

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

有帮助吗?

解决方案

要回答您有关Noteeditor的问题,只需查看您引用的线上的线,您就会看到...

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

评论似乎解释了这一切。尽管我本人还没有经历过记事本的示例,但作者看来正在建立从变化中恢复的能力,而noteeditor被暂停(然后恢复)。

正如Gsree解释的那样(当我在键入此内容时),没有一个正确或错误的答案,这仅取决于活动生命周期的何处需要做什么。

其他提示

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

如果您希望光标每次应用程序预先填充一次(并且不用担心任何更改,则可以在onCreate()中进行。

如果您希望每次可见的寿命开始时都会预处理光标(大多数服务/广播都在调用您的活动,则应使用Onstart()使用Onstart()

如果您希望将光标用于每个活动的前景生命周期,则应使用onResume()。因此,如果您有一个对话框或其他次级活动来修改一些信息,因此要重新加载光标,最好在onResume()中这样做。该方法的缺点是每次活动都在前景中重新加载。

希望这清楚

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top