惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
J
Java Code Geeks
I
InfoQ
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
V
Visual Studio Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 叶小钗
有赞技术团队
有赞技术团队
月光博客
月光博客
Martin Fowler
Martin Fowler
量子位
L
LangChain Blog
B
Blog
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans

Android Performance

SmartPerfetto 架构文章 Q&A:8 个深度技术问答 从 Trace 到洞察:SmartPerfetto AI Agent 的 Harness Engineering 实战 OpenClaw 常见问题解答:Token 消耗、能干什么、本地模型、隐私安全、使用体验 我把 OpenClaw 跑在本地三周后,发现它根本不是聊天机器人 Android Perfetto 系列 10 - Binder 调度与锁竞争 Android Perfetto 系列 9 - CPU 信息解读 Android Perfetto 系列 8:深入理解 Vsync 机制与性能分析 Android Perfetto 系列 7 - MainThread 和 RenderThread 解读 Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战 Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程 Android Perfetto 系列 4:使用命令行在本地打开超大 Trace Android ANR 系列 3 :ANR 案例分享 Android ANR 系列 2 :ANR 分析套路和关键 Log 介绍 Android ANR 系列 1 :理解 Android ANR 设计思想 Android Perfetto 系列 3:熟悉 Perfetto View Android Perfetto 系列 2:Perfetto Trace 抓取 Android Perfetto 系列 1:Perfetto 工具简介 Android Perfetto 系列目录 2023 年的方方面面 关于 The Android Performance 知识星球介绍 The Performance Design Of OS OS 设计之性能设计 当 App 有了系统权限,真的可以为所欲为? The Performance 星球茶话会 - 第一期 Systrace 线程 CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇 Systrace 线程 CPU 运行状态分析技巧 - Running 篇 Systrace 线程 CPU 运行状态分析技巧 - Runnable 篇 Android 性能优化的术、道、器 Techniques, Philosophy, and Tools for Android Performance Optimization 回顾 2021
知乎 救救你的 StartingWindow
Gracker · 2018-05-20 · via Android Performance

我们经常说 iOS 整机体验要比 Android 好,这里有第三方软件的功劳(iOS 版本质量要高于 Android 版本质量),当然也归功于苹果对 iOS 的封闭系统的管控。应用想上 App Store,就得先过审核,不合规就给你打回来。

今天我们要说的,就是 iOS 和 Android 系统差异化的一个重要体现:StartingWindow,通俗点说,就是应用启动页。iOS 和 Android 都有 StartingWindow,但是表现却完全不一样。iOS 开发要求应用必须要有一个 StartingWindow,且必须是一张图片(iOS 开发可以说说是否支持定制 Layout),用户点击桌面图标启动应用,不会有任何延迟,会立即显示这个图片;Android 系统的 StartingWindow 虽然也是系统提供的,但是由于开放性,Android 允许开发者自己定制 StartingWindow、disable StartingWindow、透明化 StartingWindow。

StartingWindow 对用户体验的影响

由于 StartingWindow 对用户体验非常重要,但是应用开发者对 StartingWindow 的滥用,导致了用户启动应用的时候,会获得非常不好的体验,我举个例子你们就明白了:

  1. 使用系统默认的 StartingWindow :用户点了应用图标启动应用,马上弹出系统默认的 StartingWindow(就是做动画的那个 Window) ,等应用加载好第一帧之后,StartingWindow 消失,显示应用第一帧,无缝衔接,体验还不错,这也是通常大部分 Android 应用的场景;比如大部分 Android 系统的自带应用,即刻、汽车之家等
  2. 自己定制简单的 StartingWindow :用户点了应用图标启动应用,弹出应用自己定制的StartingWindow,等应用加载好第一帧之后,定制的 StartingWindow 消失,显示应用主界面,由于 StartingWindow 是自己定制的,启动的时候 Decode Bitmap 或者 Inflate 自定义 Layout 会有一定的耗时,但是整体看与系统默认的差别不大,用户体验优;这样的应用包括淘宝、京东、微博、今日头条、美团等
  3. 把 StartingWindow 禁掉或者设置透明 :用户点了应用图标启动应用,由于 StartingWindow 被禁掉或者被设置透明,所以会出现点击图标后,除了图标黑一下之外没有任何响应,过个 1-N 秒(取决于应用第一帧的加载速度),直接显示应用主界面。这样的毒瘤应用包括:微信、微信读书、UC 浏览器、支付宝、工商银行、米家等。

大家可以安装一下我上面说的那些个应用自己体验一下,我是真的没法体会为何会有那么多应用采用第三种方式,偏偏很多用户只有一台手机,不认为是应用的问题,反而觉得是系统比较慢,然后各种投诉到系统这边,还是四五星的 Bug,真的是欲哭无泪。

我建议采用了第三种方式的应用的开发者,面壁思过一下,你们的产品经理是不合格的,你们作为开发没有主动提出优化这个也是失职的。不用怀疑微信也是他们的一员,只不过微信作为超级 App,在很多系统里面不杀他而已,不信你 adb shell am force-stop com.tencent.mm 一下试试。

知乎用户体验 - 数据展示

不过我今天不想说微信,我想说说知乎,因为我本人是知乎的重度用户,所以最近被知乎的体验搞得心情极差,再加上 N 多用户投诉启动慢,我必须来说两句了。

最近知乎安卓版的版本(5.17.2),虽然没有采用第三种方式,采用的是第一种方式,但是用户体验极差,具体说就是:点击桌面图标启动应用 -> 显示白屏(取决于你手机的性能,在1-5s 之间)-> 显示知乎是广告页 -> 显示知乎首页。我们之前说,白屏是大部分系统的默认 StartingWindow ,之所以会出现这样的现象是因为知乎那令人发指的应用启动速度。

我并不想从代码级别去分析他都干了啥,因为很多人对这个不感兴趣,感兴趣的可以自己抓 MethodTrace 看一下就可以了,这里我们简单从 Systrace 来看一眼就可以了,修复 Bug 的事情,让知乎的程序员去干吧。

  1. 从 StartingWindow(白屏) 出现到应用显示第一帧(SurfaceFlinger 视角,数据来自 Mix2s)
    第一帧

  2. 从 StartingWindow(白屏) 出现到应用显示第一帧(应用进程视角,数据来自 Mix2S)
    知乎冷启动

  3. Log 视角(看 am_activity_launch_time :2684)(数据来自 Pro7,Mix2s 是1552)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
05-21 22:40:58.033  1252  3371 I am_create_activity: [0,128018471,73,com.zhihu.android/.app.ui.activity.LauncherActivity,android.intent.action.MAIN,NULL,NULL,270532608]
05-21 22:40:58.037 1252 3371 I am_focused_activity: [0,com.zhihu.android/.app.ui.activity.LauncherActivity,startedActivity]
05-21 22:40:58.042 1252 3371 I sysui_action: [323,com.zhihu.android/.app.ui.activity.LauncherActivity]
05-21 22:40:58.092 1252 1293 I am_proc_start: [0,20985,10111,com.zhihu.android,activity,com.zhihu.android/.app.ui.activity.LauncherActivity]
05-21 22:40:58.133 1252 2857 I am_proc_bound: [0,20985,com.zhihu.android]
05-21 22:40:58.140 1252 2857 I am_restart_activity: [0,128018471,73,com.zhihu.android/.app.ui.activity.LauncherActivity]
05-21 22:40:59.564 1252 3109 I am_create_activity: [0,123681068,73,com.zhihu.android/.app.ui.activity.MainActivity,android.intent.action.MAIN,NULL,NULL,270532608]
05-21 22:40:59.566 1252 3109 I am_focused_activity: [0,com.zhihu.android/.app.ui.activity.MainActivity,startedActivity]
05-21 22:40:59.567 1252 3109 I am_pause_activity: [0,128018471,com.zhihu.android/.app.ui.activity.LauncherActivity]
05-21 22:40:59.570 1252 3109 I sysui_action: [323,com.zhihu.android/.app.ui.activity.LauncherActivity]
05-21 22:40:59.571 1252 3126 I am_finish_activity: [0,128018471,73,com.zhihu.android/.app.ui.activity.LauncherActivity,app-request]
05-21 22:40:59.661 1252 3094 I am_restart_activity: [0,123681068,73,com.zhihu.android/.app.ui.activity.MainActivity]
05-21 22:41:00.222 20985 20985 I am_on_resume_called: [0,com.zhihu.android.app.ui.activity.MainActivity,LAUNCH_ACTIVITY]
05-21 22:41:00.736 1252 1305 I am_activity_launch_time: [0,123681068,com.zhihu.android/.app.ui.activity.MainActivity,1078,2684]
05-21 22:41:01.269 1252 2906 I am_destroy_activity: [0,128018471,73,com.zhihu.android/.app.ui.activity.LauncherActivity,finish-imm]
05-21 22:41:01.859 1252 3072 I am_proc_start: [0,21229,10111,com.zhihu.android:pushservice,service,com.zhihu.android/.push.getui.GetuiPushService]
05-21 22:41:01.882 1252 2857 I am_proc_bound: [0,21229,com.zhihu.android:pushservice]

这长达 1.9s 的时间,用户看到的都是白屏,更不用说后面还有 3s 的广告页,然后才到主界面,说好的用户体验呢。。。而且我用的机器是小米 Mix2S,高通845加持,那些低端机器就更不用说了,时间只会多不会少。

知乎用户体验 - 用户感受

用户看到的就是下面三个步骤(截图来自 Pro7)

  1. 首先点击桌面后,显示 StartingWindow(白屏页面)
    S80521-222728

  2. 2s 后,白屏页面跳转广告页面:
    S80521-222748

  3. 3S 后跳转知乎主界面
    S80521-222753

我建议知乎还是采用大多数 Android 应用目前采用的第二种方法,即定制简单的 StartingWindow,用户体验好不说,也能拉近 iOS 和 Android 版本的体验差距,比如下图(截取自知乎 iOS 版本)
Image-1

写在最后

很大程度上来说,Android 系统的用户体验取决于第三方应用,各个厂商定制的系统能提升一部分,但是一旦进入了应用的界面,体验就完全取决于应用了。

StartingWindow 是一个很小的点,但毕竟是应用的入口,入口做的都不好的话,怎么能吸引用户每次都去访问你呢?知乎只是我举的一个小例子,毕竟还有非常恶劣的采用第三种方式的应用垫底,希望通过这个例子,各位应用开发者能体验到应用启动速度对用户的直接影响,俗话说,天下武功,唯快不破,不是没有道理的。应用优化的好,系统自然也会沾光,最终受益的还是用户。

最后还是挂一下那些非常影响用户体验的应用(采用了第三种方法),也希望读者可以反馈,我会持续更新,他们是

  1. 微信
  2. 微信读书
  3. UC 浏览器
  4. 支付宝
  5. 工商银行
  6. 米家
  7. ……

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球 : 欢迎加入,多谢支持~

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫