Android 从我方界面启动三方界面,如何巧妙地检测三方页面的生命周期呢?

26 篇文章 2 订阅

Android 从我方界面启动三方界面,如何巧妙地检测三方页面的生命周期呢?

前言

最近负责对接一个三方需求,简单描述一下就是,利用三方的容器,运行我方的内容。

虽然打开了三方应用,但是用户的体验是和己方一样的,因为三方的界面是以单独进程的形式跳入了我们的应用栈内。所以看起来和自己应用打开一个新的Activity的行为是一样的。用户体验比较好。

但三方给的工具类没有他们界面关闭的回调。这时候比如需要统计用户在三方界面的停留时长的话,就没办法做到了。

如何解决

所以我们如何感知到三方界面关闭了呢?

聪明的你一定想得到,如果我们从Activity1打开了Activity2,然后再关闭Activity2之后两者的生命周期。

如下图所示:

Activity1打开Activity2

在这里插入图片描述

Activity2返回到Activity1

所以可以利用我方Activity的生命周期取感知到三方的界面如何结束的。

方案

那么具体的解决方案,就是启动三方界面之前,我们启动一个透明的Activity专门用于生命周期的感知。

状态机

    sealed class State {
        object Initialize : State()
        object Activated : State()
        object Destroy : State()
    }

透明的ActivityonResume中进行状态校验。

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume: currentState is ${state.javaClass.simpleName}")
        when (state) {
            State.Activated -> tryFinish()
            State.Destroy -> throw IllegalStateException("it is already destroyed.")
            State.Initialize -> tryActivated()
        }
    }
    //打开三方应用,这里使用打开浏览器进行代替了
    private fun tryActivated() {
        if (BrowserHelper.openUrlByBrowser("https://www.baidu.com", AppUtil.application)) {
            state = State.Activated
            startTime = SystemClock.elapsedRealtime()
            return
        }
        finish()
    }
	//三方界面返回,销毁
    private fun tryFinish() {
        state = State.Destroy
        val consumeTime = SystemClock.elapsedRealtime() - startTime!!
        Log.d(TAG, "consumeTime: $consumeTime , currentState is ${state.javaClass.simpleName}")
        finish()
    }

结果

D/GeneralLifecycle: onResume: currentState is Initialize
D/GeneralLifecycle: onResume: currentState is Activated
D/GeneralLifecycle: consumeTime: 3936 , currentState is Destroy

源码地址

代码地址➡️➡️➡️➡️

创作不易,如有帮助一键三连咯🙆‍♀️。欢迎技术探讨噢!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pumpkin的玄学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值