有人能告诉我哪个被称为第一个,是它onActivityResult()
还是它onResume()
?例:
活动A调用startActivityForResult()
启动活动B. B执行,完成并将结果返回给A,但是首先调用A的哪个方法,onActivityResult()
或者onResume()
?
我知道有人已经通过参考活动文档回答了这个问题,但我自己找不到.
jam*_*pag 123
首先调用onActivityResult()
然后onResume()
.
从文档引用:
protected void onActivityResult(int requestCode,int resultCode,Intent data)
从以下版本开始:API Level 1当您启动的活动退出时调用,为您提供requestCode,启动它,返回resultCode,以及来自它的任何其他数据.如果活动显式返回,则不会返回任何结果,或者在操作期间崩溃,resultCode将为RESULT_CANCELED.当您的活动重新启动时,您将在onResume()之前立即收到此调用.
Car*_*arl 43
正如其他人发布的那样,在重新启动活动时,onResume()之前会调用onActivityResult().
Diane Hackborn解释说onActivityResult()在onResume()之前被调用,以便在更新UI之前允许接收和可用的任何可能影响UI的内容(可能是为了避免双重更新 - 一旦进入onResume()而没有返回结果,然后在onActivityResult()中,添加返回的结果).
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/3epIML7fjGw
这样做的一个结果是,您可能已决定仅在onResume()内执行的任何初始化(例如,来自外部源的数据的初始化,您需要是新鲜的)而不是onCreate(),在调用时将未初始化onActivityResult()作为重新启动已被OS刷新内存的应用程序的一部分发生(因为在onActivityResult()之前不会调用onResume()).
在这种情况下,onActivityResult()必须准备好对onActivityResult()使用的任何此类变量执行此类初始化.
当然,如果onActivityResult()所需的初始化可以在onCreate()而不是onResume()中执行,那么因为onCreate()将在onActivityResult()和onResume()之前的重启时被调用,那就是最简单的方法去寻找每次恢复应用时都不需要做的事情.但是,如果您正在初始化的数据来自外部源并且您需要它是新鲜的,则可能需要在onCreate()和onResume()中初始化此类数据,并使用onResume()检查onCreate中设置的标志()查看数据是否刚刚在onCreate中初始化),然后只有在尚未执行时才更新onResume().这样,它的一些年份将始终可用(至少从上一次应用程序恢复时).
处理此问题的另一种方法是将onActivityResult()返回的信息存储在将由onResume()获取并在那里处理的变量中(在onResume()执行任何所需的初始化之后),而不是在其中执行处理onActivityResult()本身的主体.
这是一个非常简洁的文档,没有提供任何解释或警告(在官方文档中)关于这种有些意外的排序的后果.在测试期间也很容易错过这个问题,因为在没有运行许多应用程序的内存充足的设备上,调用startActivityForResult()(或其变体)的活动在等待时可能永远不会从内存中刷新.启动活动以通过onActivityResult()返回结果,因此onResume()完成的所有初始化都已可用,因此可能无法检测到问题.
有关此排序的一些问题的信息性探索(包括关于尝试使用应用程序的Application对象来保护变量免受其影响的警告),以及手绘的UML序列图,在此处:
http://steveliles.github.com/android_activity_lifecycle_gotcha.html
sou*_*rar 11
onActivityResult()
首先被调用(刚刚用一些日志语句确认了这一点,并且看到onActivityResult()
之前确实调用过onResume()
)
归档时间: |
|
查看次数: |
37918 次 |
最近记录: |