执行setResult后的回调顺序

A ——> startActivityForResult ——> B ——>setResult 不执行finish 方法  A是在B执行了setResult方法还是B被finish后执行onActivityResult方法?

A ——> startActivityForResult ——> B ——>setResult ——> finish 如果栈里面A和B中间还有activity  A将不会在(B setResult和finish)后执行onActivityResult方法 而是在A startActivityForResult 后马上执行 参数resultCode为RESULT_CANCEL   该情况可能会出现在A与B不在同一栈的情况(如B的启动模式为单栈(详情))

正确调用顺序如下

A ——> startActivityForResult ——> B ——>setResult ——> finish ——> A——>onActivityResult ——>onRestart——>onStart——>onResume

原因Activity的onActivityResult方法注释如下

/**

* 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.

*

* @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)

*/

执行onActivityResult之前先执行onResume方法 经测试onStart方法在onActivityReult后面 onRestart应该一样

结论先执行onActivityResult在执行生命周期方法

时间: 2024-11-07 23:38:15

执行setResult后的回调顺序的相关文章

JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法

今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBackground()后会执行处理结果的postResult()方法,但我们并没有设置过他们的执行顺序. 以前只知道他们的运行原理,但不知道具体的实现方法,细想起来,这是一个相当不错的代码设计,所以决定研究一下. 因为一开始是通过实现方法来具体实现那些需要被执行的方法的,所以以为实现的方式是接口, 思索

Fragment回调顺序

Fragment回调顺序 onAttach->onCreate->onCreateView->onActivityCreated ps:最后发现经常在Fragment里面getActivity()为空,特别是在AsyncTask的onPostExecute里面,解决方案是定义Activity成员变量,然后在onAttach里面赋值 update:上面的ps可以解决空指针问题,但是有可能造成内存泄露.AsyncTask一直持有activity引用,只有等AsyncTask执行完,内存才会释

使用ajax后提交事件后禁用按钮,事件执行完毕后,重新启用按钮

一直想做这样的效果,实现的方法虽然不是很好,但效果还是出来了 <script runat="server"> /// <summary> /// 当Button2被点击,实际是Button3触发事件,这样就可以达到提交事件时禁用被提交的按钮效果 /// </summary> protected void Button_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(5

android 在finish()的时候不是立刻调用onDestory,怎样才能在finish后立刻回调onDestory?

============问题描述============ private MyAIDLService myAIDLService; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentN

现有T1、T2、T3三个线程,你怎样保证T2在T1执行完成之后执行,T3在T2执行完后执行?

考察join /**  * 现有T1.T2.T3三个线程,你怎样保证T2在T1执行完成之后执行,T3在T2执行完后执行?  * @author user  *  */ public class Test3 { public static void main(String[] args) throws InterruptedException { Thread T1 = new Thread(new T1()); Thread T2 = new Thread(new T2()); Thread T

给listview加动画,让动画执行结束后再刷新

问题:当给listview的条目加动画时,例如添加一个条目或者移除一个条目,动画效果会和添加删除条目的逻辑同时进行,因为动画并不是阻塞式的,这样会造成动画还没有结束,条目已经添加或者移除,从而动画作用在下面一个条目上面. 解决办法:想办法让动画执行完了之后再进行条目的添加或者移除操作(也就是刷新数据适配器),可以通过设置动画监听来实现,将要添加或者删除条目的逻辑放到动画监听的方法中,可以放到动画结束时调用的方法中,这样就保证了动画先执行,然后才刷新数据适配器 holder.iv_lock.set

ajax执行完成后,再执行下面的代码

一般ajax设置的都是异步的,但是有时候我们有这种需求,就是等ajax执行完成之后,在执行下面的函数. 1设置async:false 在jq中直接设置了ajax是异步的还是同步的 一般如果不写这个,默认的就是异步的:但是当async:false表示的就是同步的: 2将需要执行完成后的执行的代码放在ajax成功函数中 function ajax(){ $ajax({ url:xxxx, data:{}, dataType:json, success:function(data){ say(): }

js setTimeout深度递归后完成回调

setTimout原型: iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])     setTimeout有两种形式 setTimeout(code,interval)  setTimeout(func,interval,args) var i=0;   function test(){       i+=1;       alert(i);   }   setTimeout("test()",1000); 

java并发编程学习:如何等待多个线程执行完成后再继续后续处理(FutureTask、synchronized、CyclicBarrier)

多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的static变量,假如有10个线程,每个线程处理完上去累加下结果,然后后面用一个死循环(或类似线程阻塞的方法),去数这个结果,达到10个,说明大家都爽完了,可以进行后续的事情了,这个想法虽然土鳖,但是基本上跟语言无关,几乎所有主流编程语言都支持. package yjmyzz.test; publi