IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 从我方界面启动三方界面,如何巧妙地检测三方页面的生命周期呢? -> 正文阅读

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

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

源码地址

代码地址????????

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:58:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 5:00:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码