You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

onActivityResult已废弃 新API下如何实现Activity.finishActivity(REQUEST_CODE)功能

Activity Result API设计初衷是将请求码的维护完全交由框架内部处理,所以没有对外暴露请求码,也没有提供对应的finishActivity等价API,我们可以通过以下两种上层自定义逻辑实现相同的批量关闭效果,两种方案都不会触发主页的新服务请求,仅使用回退栈内已有的主页实例:

方案1:本地广播通知目标Activity主动销毁

该方案实现简单、无需持有Activity实例、无内存泄漏风险,是推荐方案:

  • 定义专属关闭通知的广播Action常量:
const val ACTION_FINISH_TARGET_ACTIVITY = "com.你的包名.action.FINISH_TARGET_ACTIVITY"
  • 在需要被批量关闭的目标Activity中注册广播接收器:
class 你的目标Activity类名 : AppCompatActivity() {
    private val finishReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            if (intent?.action == ACTION_FINISH_TARGET_ACTIVITY) {
                finish()
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 注册应用内本地广播,不会对外泄露
        LocalBroadcastManager.getInstance(this)
            .registerReceiver(finishReceiver, IntentFilter(ACTION_FINISH_TARGET_ACTIVITY))
    }

    override fun onDestroy() {
        super.onDestroy()
        // 解绑广播避免内存泄漏
        LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver)
    }
}
  • 需要批量关闭所有对应Activity时,发送广播即可,效果和原finishActivity(REQUEST_CODE)完全一致:
LocalBroadcastManager.getInstance(this)
    .sendBroadcast(Intent(ACTION_FINISH_TARGET_ACTIVITY))

方案2:手动维护目标Activity实例集合

如果不想使用广播,可以自己管理实例实现批量关闭:

  • 定义全局实例管理类:
object TargetActivityManager {
    private val runningInstances = mutableListOf<你的目标Activity类名>()

    fun addInstance(activity: 你的目标Activity类名) {
        runningInstances.add(activity)
    }

    fun removeInstance(activity: 你的目标Activity类名) {
        runningInstances.remove(activity)
    }

    fun finishAllInstances() {
        runningInstances.forEach { it.finish() }
        runningInstances.clear()
    }
}
  • 在目标Activity的生命周期中绑定管理类:
class 你的目标Activity类名 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        TargetActivityManager.addInstance(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        TargetActivityManager.removeInstance(this)
    }
}
  • 调用批量关闭方法:
TargetActivityManager.finishAllInstances()

内容的提问来源于stack exchange,提问作者JustASimpleLineOfCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:57:03