首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当Sub-Activity完成时,有时不会调用onActivityResult

当Sub-Activity完成时,有时不会调用onActivityResult方法。这种情况通常发生在Sub-Activity被系统销毁或者被其他Activity覆盖的情况下。

造成这种情况的原因可能有以下几种:

  1. Sub-Activity被系统销毁:当系统内存不足时,为了释放资源,系统可能会销毁一些处于后台的Activity。如果Sub-Activity被销毁,那么当其完成后,不会调用onActivityResult方法。
  2. Sub-Activity被其他Activity覆盖:如果在Sub-Activity启动后,又启动了其他Activity并将其覆盖在Sub-Activity之上,那么当Sub-Activity完成后,不会调用onActivityResult方法。

为了解决这个问题,可以采取以下几种方法:

  1. 在启动Sub-Activity时,使用startActivityForResult方法启动,并在调用方的Activity中重写onActivityResult方法。这样可以确保当Sub-Activity完成时,能够回调onActivityResult方法。
  2. 在Sub-Activity的代码中,确保在完成时调用setResult方法设置结果码,并调用finish方法关闭Sub-Activity。这样可以确保Sub-Activity完成时,会触发回调。
  3. 在调用方的Activity中,可以通过重写onSaveInstanceState方法保存Activity的状态,并在onActivityResult方法中恢复状态。这样可以避免Sub-Activity被销毁时导致的回调问题。

总结起来,当Sub-Activity完成时,有时不会调用onActivityResult方法可能是因为Sub-Activity被系统销毁或者被其他Activity覆盖。为了解决这个问题,可以使用startActivityForResult方法启动Sub-Activity,并在调用方的Activity中重写onActivityResult方法,同时在Sub-Activity中调用setResult方法设置结果码并关闭Sub-Activity。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

是时候丢掉 onActivityResult 了 !

: "") } }API } 定义一个 REQUEST_CODE ,同一页面有多个,保证不重复 调用 startActivityForResult 在 onActivityResult...回调结果可用时,通过该接口通知。需要注意的一点是,由于 prepare() 方法的泛型限制,这里的返回值 result 一定是类型安全的。下表是系统内置协议和其返回值类型的对应关系。...大致流程就是,自动生成 requestCode,注册回调并存储起来,绑定生命周期,收到 Lifecycle.Event.ON_DESTROY 事件,自动解绑注册。...有时候我们可能会在结果回调中进行一些复杂的处理操作,无论是之前的 onActivityResult() 还是上面的写法,都是直接耦合在视图控制器中的。...其实 Activity Result API 的核心操作都是通过 ActivityResultRegistry 来完成的,ComponentActivity 中包含了一个 ActivityResultRegistry

68120

Android startActivityForResult和setResult的区别

2、startActivityForResult( ) 可以一次性完成这项任务,程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而这个Text2Activity...调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。...()方法 Android activity的setResult()在什么时候调用(重点也是难点) 如果在startActivityForResult起来的Activity里面设置setResult,结果并不会马上返回给...那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(), 因为这些方法调用不一定是在finish之前的,当然在onCreate...为RESULT_CANCELED,也就不会返回任何数据了 .

1.3K31

金九银十Android面试复习题集:关于四大组件中的Activity你了解多少?

onCreate() Activity第-次被创建的时候调用,一些初始化操作可以在这里完成。 onStart() 这个方法在Activity 由不可见变为可见的时候调用。... B Activity 的 launchMode 为 singleTop 且 B Activity 已经在栈顶(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化: B.onPause...如果新Activity是透明主题,旧Activity会不会走onStop? 不会! 锁定屏与解锁屏幕,Activity如何执行生命周期的?...锁屏只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()。 横竖屏切换的生命周期?...onActivityResult 在哪两个生命周期之间回调? onActivityResult 不属于 Activity 的生命周期,一般被问到这个问题大家都会懵逼。

1.4K00

Fragment中调用startActivityForResult的那些坑

调用的几种方式 用getActivity方法发起调用,只有父Activity的onActivityResult调用,Fragment中的onActivityResult不会调用 直接发起startActivityForResult...调用,当前的Fragment的onActivityResult,和父Activity的onActivityResult都会调用 用getParentFragment发起调用,则只有父Activity和父...Fragment的onActivityResult会被调用,当前的Fragment的onActivityResult不会调用。...方法就可以根据requestCode获取对应的Fragment,以便调用Fragment的onActivityResult方法 最后看一下ActivityCompat的startActivityForResult...直接在Fragment中调用startActivityForResult方法 2.如果父Activity中覆写了onActivityResult,则需要确保调用了super.onActivityResult

1.9K10

Android面试题集:以前烂大街的四大组件-Activity,面试重提这些知识点你还记得吗?

onCreate() Activity第-次被创建的时候调用,一些初始化操作可以在这里完成。 onStart() 这个方法在Activity 由不可见变为可见的时候调用。... B Activity 的 launchMode 为 singleTop 且 B Activity 已经在栈顶(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化: B.onPause...如果新Activity是透明主题,旧Activity会不会走onStop? 不会! 锁定屏与解锁屏幕,Activity如何执行生命周期的?...锁屏只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()。 横竖屏切换的生命周期?...onActivityResult 在哪两个生命周期之间回调? onActivityResult 不属于 Activity 的生命周期,一般被问到这个问题大家都会懵逼。

66800

Activity

Activity调用的第一个方法 , 创建完成后必须在Manifest文件中 声明此Activity 系统才会知道有这个Activity 如果有需要也可以为此Activity添加IntentFilter(IntentFilter稍后我会再做总结),以供外部程序来启动,一般同一应用中不会用到隐式启动。...()中获取到取得的图片 /** * * @param requestCode 启动的 requestCode * @param resultCode 跳转的activity给的 * @param...img.setImageURI(uri); //设置给 ImageView } } ---- 保存Activity的状态 当用户 离开Activity去往另一个Activity;...Activity会被压入返回栈,如果内存不够就会被销毁 ,Activity被销毁后其中的数据当然就没了,如果需要保留这些数据可调用 方法 onSaveInstanceState()方法 @Override

92060

Android插件化学习之路(五)之代理Activity

的生命周期 目前还真的没什么办法能够处理这个问题,一个Activity的启动,如果不采用标准的Intent方式,没有经历过Android系统Framework层级的一系列初始化和注册过程,它的生命周期方法是不会被系统调用的...onActivityResult = localClass.getDeclaredMethod("onActivityResult", 33....mActivityLifecircleMethods.put("onActivityResult", onActivityResult); 39. } 其次,同步生命周期,主要看一下onResume...看如下代码,很好理解,就是系统调用代理activity生命周期方法的时候,就通过反射去显式调用apk中activity的对应方法。 1. @Override 2....,这样就完成了插件activity的生命周期管理,并且没有采用反射,当我们想增加一个新的生命周期方法的时候,只需要在接口中声明一下同时在代理activity中实现一下即可. public interface

31130

Android onActivityResult获取返回值的用法

现有 MainActivity,它进入到 SecondActivity 后,在 SecondActivity 中进行了某些操作然后需要将值返回给 MainActivity ,就需要用到 onActivityResult...一般来说: 显式意图:调用 Intent.setComponent() 或 Intent.setClass() 方法明确指定了组件名的 Intent 为显式意图,显式意图明确指定了 Intent 应该传递给哪个组件...MainActivity里面的主要代码 (1)需要返回值,那么在启动另一个Activity要用到startActivityForResult(intent, REQUEST_CODE); 注意第二个参数是请求的...例如,调用系统图库的返回,请看代码: final int CROP_PIC_REQUESTCODE = 23; final int SELECT_PICTURE = 21; if (resultCode...== RESULT_OK && requestCode == SELECT_PICTURE) { System.out.println("调用图库返回,关闭activity

1.1K30

【Android基础】利用Intent在Activity之间传递数据

注意:在调用startActivityForResult()你可以利用显示Intent或者隐式Intent,但是在你能够利用显式Intent的时候尽量利用显式Intent,这样能够保证返回的结果是你期待的正确结果...Integer的变量作为启动参数,启动的那个Activity退出这个参数会被作为回调函数的一个参数,用来区分返回结果,也就是说你启动Activity传递的参数(requestCode)和返回结果的那个参数...Activity窗口闪烁; 接收返回结果: startActivityForResult()启动的Activity完成任务退出,系统会回调你调用Activity的onActivityResult...()方法,这个方法有三个参数: resquestCode : 启动Activity传递的requestCode; resultCode: 表示调用成功或者失败的变量,值为下面二者之一; /** Standard...如果你想给调用你的Activity返回一个结果可以通过调用setResult()设置返回内容,然后结束这个Activity。

1.4K60

Android开发笔记(四十)组件通讯工具Intent

Intent完成的工作主要有三部分: 1、Intent需标明本次通讯请求是从哪里来,到哪里去,要怎么走; 2、发起方携带上本次通讯需要的数据内容,接收方则对收到的Intent数据进行解包; 3、如发起方要求判断接收方的处理结果...当然,由于动作是模糊匹配,因此有时需要更详细的路径,比如说知道某人住在天通苑小区,但并不能直接找到他家,所以还得说明他住在天通苑的哪一期、哪号楼、哪一层、哪个单元。...该类别用于未注册CATEGORY_LAUNCHER的APP,如果不注册CATEGORY_LAUNCHER,就没有APP页面,也不会在桌面上显示,但总得有地方找到这个APP,所以就用到了CATEGORY_INFO...,有时又得处理下个页面的应答数据(通常发生在下个页面返回到上个页面的时候)。...; 2、后一页面接收请求数据,进行相应处理; 3、后一页面在返回前一页面,打包应答数据,调用setResult方法返回信息,setResult的第一个参数表示应答代码,代码示例如下: Intent

62130

Android Activity之间的数据传递【转载】

取出String只需要指定key String name=intent.getStringExtra("name"); //取出int要指定key,还要设置默认值,intent中没有该key对应的value...不管多早调用这句代码,这句代码在当前Activity销毁才会执行,即此Activity销毁才会回传数据。请求码和结果码不必相同。...结果码唯一标识回传的Intent 3、在上一级Activity中取出回传的数据 上一级Activity使用 startActivityForResult() 开启目标Activity后,目标...Activity销毁,会向上一级Activity回传数据,并回调上一级 Activity的 onActivityResult() 方法。...void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { //调用基类的方法,此句代码会自动生成

1K20
领券