谁能告诉我谁先被调用,是onActivityResult()还是onResume()?示例:
活动A调用startActivityForResult()来启动活动B。B执行、完成并将结果返回给A,但首先调用A的哪个方法:onActivityResult()或onResume()
我知道有人已经通过参考Activity Docs回答了这个问题,但我在那里找不到。
发布于 2011-06-24 21:24:01
首先调用onActivityResult(),然后调用onResume()。
引用自文档:
保护的无效数据(int requestCode,int resultCode,Intent data)
from :当您启动的活动退出时,将调用API Level 1,为您提供启动该活动的requestCode、它返回的resultCode以及其中的任何其他数据。如果活动显式返回,没有返回任何结果,或者在操作过程中崩溃,则resultCode将为RESULT_CANCELED。当您的活动重新启动时,您将在onResume()之前收到此调用。
发布于 2013-03-05 09:25:25
正如其他人所说,当您的活动重新启动时,onActivityResult()在onResume()之前被调用。
Diane Hackborn解释说,在onResume()之前调用onActivityResult()是为了允许在更新UI之前接收和使用任何可能影响UI的东西(大概是为了避免在没有返回结果的onResume()中重复更新一次,然后在onActivityResult()中添加返回结果)。
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/3epIML7fjGw
这样做的一个后果是,当调用onActivityResult()作为重启已被操作系统从内存中清除的应用程序的一部分时(因为onResume()不会在onActivityResult()之前被调用),您可能决定仅在onResume()内执行的任何初始化(例如,需要刷新的来自外部源的数据的初始化)都将被取消初始化。
在这种情况下,onActivityResult()必须准备好为onActivityResult()使用的任何这样的变量执行这样的初始化。
当然,如果onActivityResult()所需的初始化可以在onCreate()而不是onResume()中执行,那么由于onCreate()将在onActivityResult()和onResume()之前在重启时被调用,这将是处理不需要在每次应用程序恢复时执行的事情的最简单方法。但是,如果您正在初始化的数据来自外部源,并且需要它是最新的,那么您可能希望在onCreate()和onResume()中都初始化这样的数据,使用onResume()检查onCreate()中设置的标志以查看数据是否刚刚在onCreate中初始化,然后仅在尚未初始化时才在onResume()中更新它。这样,一些年份的应用程序将始终可用(至少在应用程序恢复的前一次)。
处理此问题的另一种方法是将onActivityResult()返回的信息存储在变量中,这些变量将由onResume()拾取并在那里进行处理(在onResume()执行了任何所需的初始化之后),而不是在onActivityResult()本身的主体中执行处理。
这是一个非常简洁的功能,没有提供任何解释或警告(在官方文档中)关于这种有点出乎意料的排序的后果。在测试过程中也很容易遗漏该问题,因为在内存充足且运行的应用程序不多的设备上,在等待启动的活动通过onActivityResult()返回结果时,调用startActivityForResult() (或其变体)的活动可能永远不会从内存中清除,因此onResume()完成的所有初始化都将可用,因此可能无法检测到问题。
这里有一个围绕这个排序的一些问题的信息探索(包括关于试图使用应用程序的Application对象来保护变量不受其影响的警告),以及一个手绘的UML序列图,如下所示:
http://steveliles.github.com/android_activity_lifecycle_gotcha.html
发布于 2011-06-24 22:03:14
首先调用onActivityResult() (只是用一些日志语句确认了这一点,并看到onActivityResult()确实是在onResume()之前调用的)
https://stackoverflow.com/questions/6468319
复制相似问题