首页
学习
活动
专区
工具
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。

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

相关·内容

Android面试常问基础知识点(附详细解答)

1)Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个Activity通常是一个单独的屏幕,Activity通过Intent来进行通信。Android中会维持一个Activity Stack,当一个新Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。 2)Service:服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。 3)ContentProvider:内容提供者,使一个应用程序的指定数据集提供给其他应用程序,其他应用可通过ContentResolver类从该内容提供者中获取或存入数据。它提供了一种跨进程数据共享的方式,当数据被修改后,ContentResolver接口的notifyChange函数通知那些注册监控特定URI的ContentObserver对象。 如果ContentProvider和调用者在同一进程中,ContentProvider的方法(query/insert/update/delete等)和调用者在同一线程中;如果ContentProvider和调用者不在同一进程,ContentProvider方法会运行在它自身进程的一个Binder线程中。 4)Broadcast Receiver: 广播接收者,运用在应用程序间传输信息,可以使用广播接收器来让应用对一个外部事件做出响应。

03

onSaveInstanceState和onRestoreInstanceState详解

一. 作用 Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁 一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情 况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而 onPause()适合用于数据的持久化保存。 在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在 onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该 activity在将来某个时刻回来时可以恢复其先前状态。

05
领券