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

推荐订阅源

N
News | PayPal Newsroom
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
NISL@THU
NISL@THU
WordPress大学
WordPress大学
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threat Research - Cisco Blogs
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
Security Archives - TechRepublic
Security Archives - TechRepublic
有赞技术团队
有赞技术团队
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Latest news
Latest news
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
S
Schneier on Security
I
Intezer
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
爱范儿
爱范儿
The Register - Security
The Register - Security
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
美团技术团队
B
Blog RSS Feed

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 一本讲 Android 流畅性的书,应该有什么内容? Android 系统开发系列(1):Android 12 源代码下载、编译和刷机 Android Systrace 响应速度实战 3 :响应速度延伸知识 Android Systrace 响应速度实战 2 :响应速度实战分析-以启动速度为例 Android Systrace 响应速度实战 1 :了解响应速度原理 Android Systrace 流畅性实战 3 :卡顿分析过程中的一些疑问 Android Systrace 流畅性实战 2 :案例分析 - MIUI 桌面滑动卡顿分析 Android Systrace 流畅性实战 1 :了解卡顿原理 华为手机刷微博体验更好?技术角度的一些分析和思考 一个「闰」字引发的事故 - 三星系统重启分析 Android App 链式唤醒分析 Android Systrace 基础知识 - SurfaceFlinger 解读 Android 开发者学习路线(2020 版本) 我的 2020 年读书单 Android Systrace 基础知识 - CPU Info 解读 Android Systrace 基础知识 - Triple Buffer 解读 Android Systrace 基础知识 - Binder 和锁竞争解读 「置顶」博客文章目录 Android Systrace 基础知识 - Vsync 解读 Android App 启动优化全记录 Android Systrace 基础知识 - MainThread 和 RenderThread 解读 Android Systrace 基础知识 - Input 解读 Android 中的“后台无效动画“行为分析 Android 基于 Choreographer 的渲染机制详解 Android 中的卡顿丢帧原因概述 - 低内存篇 Android 桌面被杀问题分析案例 Android 中的卡顿丢帧原因概述 - 应用篇 Android 中的卡顿丢帧原因概述 - 系统篇 Android 中的卡顿丢帧原因概述 - 方法论 Android 中的 Activity Launch Mode 详解 Android 中的 Hardware Layer 详解 Android Systrace 基础知识 -- 分析 Systrace 预备知识 Android Systrace 基础知识 - SystemServer 解读 Android Systrace 基础知识 -- Systrace 简介 Android Systrace 基础知识 -- Why 60 fps ? Android Systrace -- 系列文章目录 Android 新的流畅体验,90Hz 漫谈 利器 - 高效工具推荐 Android 无障碍服务导致的整机卡顿案例分析 2018 年度好物推荐 - 给辛勤工作的自己一点奖励 Android 系统开发源码环境搭建 陆奇:除了好代码,工程师怎样才算优秀? 程序员的修炼-08-阅读之美 程序员的修炼-07-游戏与编程 程序员的修炼-06-互联网那些事 程序员的修炼-05-了解你的用户 程序员的修炼-04-关于测试的一些思考 程序员的修炼-03-Web 设计原则 程序员的修炼-02-编程之道 程序员的修炼-01-绝地反击之术 Android 系统不释放内存吗? 关于 Android 系统流畅性的一些思考 「置顶」Android 性能优化必知必会 2017 年度好物推荐 - 给辛勤工作的自己一点奖励 2017 Android Bottom navigation 规范二:样式、行为与规格 Android Bottom Navigation 规范一:使用方法 Android 中如何计算 App 的启动时间? Android 应用启动优化:一种 DelayLoad 的实现和原理(下篇) Android 应用启动优化 - 一种 DelayLoad 的实现和原理(上篇) Android hwui 中 RenderThread 工作流程 Java7 HashMap 源码分析 Android 代码内存优化建议 - OnTrimMemory 优化 Android 代码内存优化建议 - Android 资源篇 Android 代码内存优化建议 - Android 官方篇 Android 代码内存优化建议 - Java 官方篇 Nexus6 with Android M 开启多窗口模式 细说 Java 单例模式 Android 性能优化典范 - Profile GPU Rendering Android 性能优化典范 - Understanding VSYNC
知乎 救救你的 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性能优化知识星球 : 欢迎加入,多谢支持~

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

微信扫一扫