[译] 谷歌寻踪圣诞老人应用(Santa Tracker)迁移到 Android App Bundle 记录

首先是用户启动游戏时的 UX。我们首先打开显示 logo 和游戏标题的 ‘启动页(splash screen)’ activity,过一小段时间再运行游戏。运行游戏需要的全部信息都作为 intent extras 传送到启动页了。数年来该行为都没有变化,我们也并不打算修改这一行为。相反,我们从中找到了动态分发功能模块的切入点。

2018 年我们更新了启动行为,发送了四点信息:游戏标题、游戏图标、要运行的 Activity 类以及该功能模块的 ID。一旦启动页展示出来,就检查是否安装了相关模块。如果安装了,就直接运行,反之则通过 Play Core library 请求安装,并展示下载进度条:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在早期测试中发现需要小心处理下载安装时的场景。我们并不想因为在用户处于移动网络时安装功能模块,而无意中让他们花钱。为了应对这种情形,我们在检测到当前网络是流量网络(如移动网络)时增加了确认对话框:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整体逻辑如下:

/* Copyright 2018 Google LLC.
SPDX-License-Identifier: Apache-2.0 */

override fun onCreate(savedInstanceState: Bundle?) {
// … 安装

// 游戏功能模块的 Id
val featureModuleId = intent.getStringExtra(…)

if (featureModuleName in splitInstallManager.installedModules) {
// 功能模块已经安装,直接运行
launchTargetActivity()
} else {
// 功能模块没有安装,请求安装
val mgr = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (mgr.activeNetworkInfo?.isConnected == true) {
// 有网络…
if (mgr.isActiveNetworkMetered) {
// TODO …流量网络,请求用户确认
showMeteredNetworkConfirmDialog()
} else {
// …否则,直接下载
startModuleInstall(featureModuleId)
}
} else {
// 没有网络,显示错误框并退出
onFeatureModuleLaunchFailure()
}
}
}

由于 Play Core API 的缘故,startModuleInstall() 的方法看起来有些复杂。需要在安装时添加一个用于回调的 listener,然后再请求安装,如下所示:

/* Copyright 2018 Google LLC.
SPDX-License-Identifier: Apache-2.0 */

private lateinit var splitInstallManager: SplitInstallManager
private lateinit var installListener: SplitInstallStateUpdatedListener

private fun startModuleInstall(featureModuleId: String) {
// 显示进度条
progressbar.isVisible = true
progressbar.isIndeterminate = true

// 添加 listener
splitInstallManager.registerListener(installListener)

// 发送请求,开始安装
val request = SplitInstallRequest.newBuilder()
.addModule(featureModuleId)
.build()
splitInstallManager.startInstall(request)
}

listener 会监听到安装完成的信号,然后运行游戏。可以在 这里 找到完整代码。

成果

如果你读到这里了,一定会想知道我们的成果如何……

Android Studio 分析 App Bundle(以及 APK)的工具相当好用,可以深入观察每个功能模块的下载体积。我们可以在其中看到我们应用的初始下载体积是 11.6MB (并没有达到 10MB 的目标),总下载体积是 25.5MB。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但……这些值只展示了生成的 Android App Bundle 文件,并没有计算 Google Play 动态下发(上文讨论过)节省的体积。观察特定设备下载体积最准确的方式是在 Google Play 开发者控制台 中。上传 App Bundle 后,就可以在 ‘Release Management’ -> ‘Artifact Library’ 看到特定设备的下发包体积:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到我们达到了 10MB 的目标,下载体积只有 9.21MB!相比 2017 年 60MB 的应用,我们减少了 85% 的体积! 🎉🎆
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

普惠众生

希望本文展示了迁移到 App Bundle 可以带给用户的巨大收益。尽管分离模块并不是什么举手之劳,但好的代码实践诸如高内聚低耦合也会收益良多。
关于上面的数字还有一小点要注意的是,其中也有我们使用的其他体积压缩技术的功劳,包括 asset 压缩和迁移到 R8。我们会在下篇文章中讨论这些。

尾声

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。

不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

image

大厂面试真题

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《2017-2021字节跳动Android面试历年真题解析》

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 37
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
投影寻踪(matlab)是一种基于MATLAB软件的计算机视觉技术,用于在二维图像或视频中跟踪并标记出感兴趣目标的位置。 在MATLAB中进行投影寻踪的一般步骤如下: 1. 加载图像或视频数据:首先,我们需要加载二维图像或视频数据作为输入。可以使用MATLAB提供的函数来读取图像或视频文件。 2. 预处理:在进行投影寻踪之前,需要对输入进行一些预处理,以便提取感兴趣目标。这可能包括图像的降噪、增强或调整。 3. 目标初始化:在投影寻踪之前,需要手动选择感兴趣目标的初始位置。可以使用鼠标或其他方法在图像或视频中选择感兴趣目标的位置。 4. 特征提取:在每一帧图像中,需要提取感兴趣目标的特征以进行跟踪。这些特征可以是颜色、纹理、形状等,根据具体应用而定。 5. 目标跟踪:通过计算当前帧中的特征与初始位置的特征相似度,可以利用各种算法进行目标跟踪。常见的算法包括均值漂移、卡尔曼滤波或粒子滤波等。 6. 结果显示:最后,可以将跟踪结果显示在图像或视频中,以便用户查看和分析。可以使用MATLAB提供的图形界面函数来实现结果的可视化。 投影寻踪(matlab)在计算机视觉领域有着广泛的应用,例如运动分析、目标监测、行为识别等。通过使用MATLAB提供的丰富工具和函数,可以更加方便地进行投影寻踪,并且可以根据具体需求进行定制和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值