Android中onactivityresult()和onresume()的调用顺序问题

Posted by PanMin Blog on October 25, 2016

– layout: post # 使用的布局(不需要改) title: Android中onActivityResult()和onResume()的调用顺序问题 # 标题 subtitle: #副标题 date: 2016-10-25 # 时间 author: PanMin # 作者 header-img: img/post-bg-2015.jpg #这篇文章标题背景图片 catalog: true # 是否归档 tags: #标签 - Android —

在Android生命周期中,如果使用到startActivityForResult(),则在新Activity被finish掉之后,onActivityResult()和onResume()到底是哪一个先调用的呢?

我们来看官方源码:

/**
 * Called when an activity you launched exits, giving you the requestCode
 * you started it with, the resultCode it returned, and any additional
 * data from it.  The <var>resultCode</var> will be
 * {@link #RESULT_CANCELED} if the activity explicitly returned that,
 * didn't return any result, or crashed during its operation.
 *
 * <p>You will receive this call immediately before onResume() when your
 * activity is re-starting.
 *
 * <p>This method is never invoked if your activity sets
 * {@link android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
 * <code>true</code>.
 *
 * @param requestCode The integer request code originally supplied to
 *                    startActivityForResult(), allowing you to identify who this
 *                    result came from.
 * @param resultCode The integer result code returned by the child activity
 *                   through its setResult().
 * @param data An Intent, which can return result data to the caller
 *               (various data can be attached to Intent "extras").
 *
 * @see #startActivityForResult
 * @see #createPendingResult
 * @see #setResult(int)
 */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}

从上面的源码注释第二段可以看到:You will receive this call immediately before onResume() when your activity is re-starting. 所以很明显,在activity重新恢复启动的时候,onActivityResult()会在onResume()之前调用完毕。

而且,onActivityResult()还会在onStart()之前调用完毕。经过断点调试,发现它们三者的调用顺序如下:

onActivityResult() -> onStart() -> onResume()