Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android生命周期:在onStart()或onResume()中的活动中填写数据?_Android_Dialog_Lifecycle_Onresume_Onstart - Fatal编程技术网

Android生命周期:在onStart()或onResume()中的活动中填写数据?

Android生命周期:在onStart()或onResume()中的活动中填写数据?,android,dialog,lifecycle,onresume,onstart,Android,Dialog,Lifecycle,Onresume,Onstart,您是否应该通过光标获取数据并在屏幕上填写数据,例如在onStart()或onResume()中设置窗口标题 onStart()似乎是一个合乎逻辑的地方,因为在onStart()之后,活动可以显示,尽管是在后台。值得注意的是,我遇到了一个管理对话框的问题,这让我重新思考这个问题。如果用户在对话框仍然打开时旋转屏幕,则在onStart()和onResume()之间调用。如果对话框需要以数据为基础,则在onResume()之前需要有数据 如果我对onStart()的看法是正确的,那么为什么记事本示例在

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

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

如果我对
onStart()
的看法是正确的,那么为什么记事本示例在
onResume()
中给出了一个不好的示例?请参阅NoteEditor.java第176行(
title=mCursor.getString…

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


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

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

如果您希望每个应用程序预填充一次游标(并且不担心任何更改,则可以在onCreate()中执行此操作。只有在终止应用程序进程并重新初始化应用程序时,才会调用此方法

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

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


希望这能让你明白

要回答你关于NoteEditor的问题,只需看看你引用的那一行上面的行,你就会看到

    // Requery in case something changed while paused (such as the title)
    mCursor.requery();
评论似乎解释了这一切。虽然我自己还没有看过记事本示例,但作者似乎正在增强在记事本编辑器暂停(然后恢复)时从更改中恢复的能力


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

如果您有一个对话框,a)基于您的数据,b)正在修改该数据,那么您需要a)将光标数据加载到onStart()中,以实现onPrepareDialog(),和,b)在onResume()中重新加载光标数据,因为暂停后数据可能已更改???@pjv根据您的要求,您只需在onResume()方法中加载数据即可。在onResume()中管理对话框生命周期。有关活动(),请参阅文档。在用户可以与活动交互之前,该活动将在Resume上进行。感谢您的评论,但正如我在第二段中所说,wrt。托管对话框:onCreateDialog()和onPrepareDialog()在onResume()之前调用。当有一个完全可用的平台实现时,我不想亲自管理对话框,这只是说他们会在暂停后重新查询。我在问题中也提出了同样的建议。你的意思是?显然,这只是一个坏例子,而不是记事本中的一个bug,因为记事本编辑器与之交互的其他任何东西都不会放大onStart()和onResume()之间的差异。@pjv:我的观点是,在没有onPause()->onResume()->onPause()->onResume()的情况下,onPause()->onResume()等可能会多次出现(或onPause()->onStop()->onDestroy()->onCreate()->onStart())曾经发生过。如果在onPause()->onResume()周期中有可能对任何内容进行关键更改,则在onResume()中而不是在onStart()中“执行”(和“重做”)某些操作绝对有意义.好的,这更清楚了,你是对的,我也会在onResume()中看到“重做”。