移动平台应用开发

深入探究Android应用启动起点

痞子三分冷 提交于 2020-12-29 22:29:04
本文作者:yanxin1563 原创 liuwenlong 背景 开发者文档中提到,Android应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动或热启动。三种启动状态中,冷启动耗时最久,系统和App有较多初始化的工作。如果启动时间过长,可能会导致用户在应用商店打低分,甚至完全弃用app,所以冷启动速度是各个app非常重要的性能指标之一。 在冷启动速度优化的工作中,打点是非常重要的一环,统计点位该如何选,以及为什么要这么选,有很多细节值得探究,本文主要深入探究Android端app层如何选择进程创建的起点。 三个时机简述 本文中涉及的3个App层进程创建时间的起点:Application <init>,Process.getStartElapsedRealTime,/proc/self/stats starttime。 简单介绍下3个进程创建时间起点: Application <init>:Application构造方法; Process.getStartElapsedRealTime:Framework中记录的进程创建的起点,此接口有版本限制,Android N以下版本无法使用; /proc/self/stats starttime:内核中记录的进程创建的起点。 3个进程创建时间起点时序如下:/proc/self/stats starttime 早于

前端性能优化实践 之 百度App个人主页优化

柔情痞子 提交于 2020-04-28 06:51:03
本文作者:yanxin1563 原创:前端工程师 panming 前言 性能是每个前端工程师都应该关注的话题,通用的优化手段已有许多文章和实践,就不再赘述,本篇以百度App个人主页为例,聊聊针对业务特点进行的一些性能优化实践。 适用于 :传统意义的优化手段能用的都用了:打包拆包,缩减体积和 HTTP 请求数、CDN和按需加载等,但性能方面仍不太理想。 定义指标,建设报表 优秀方案的制定首先需要准确的数据做支撑。 一般来说,前端性能指标包括 DOM ready 、 First Contentful Paint 、 白屏、首屏、 用户可操作时间 、 onload时间等, 在实际中需要结合业务本身的特点进行定义,一般通用的指标定义并不能体现用户在当前业务下的真实体验。 个人主页是在百度App客户端内的web页面,有 hybrid版(使用file协议直接加载本地HTML和JS、CSS)和web版(打开一个web URL)两种不同的打开方式。 首先,我们了解一下个人主页页面的结构: 头部区域展示当前作者的个人信息,tab区域则是作者创作产生的内容。页面中所有数据均为异步获取。 打开个人主页需要经历的过程可简化成以下几个: 其中耗时可划分为端耗时、网络和server耗时、前端渲染耗时三大部分: 根据以上过程,我们制定了定义指标的原则: 主页页面展现的用户数据,是页面内JS 请求数据后的异步渲染

百度App iOS工程化实践: EasyBox破冰之旅

半腔热情 提交于 2020-04-13 17:32:36
【今日推荐】:为什么一到面试就懵逼!>>> 本文作者:yanxin1563 本文作者: Yunpeng-基础技术 前言 百度App从单一的搜索工具发展到今天以搜索和Feed流为双引擎的综合性内容消费服务平台,其复杂程度已然不可同日而语矣。 作为一个日活过亿的超级App,业务规模庞大,相关技术人员超过千人,客户端支持主流的移动技术,涉及近百业务方,技术形态复杂,各种组件近三百个,代码百万量级,由此带来的工程化问题是技术团队的一个极大挑战。 项目的膨胀导致了很多不起眼的小问题被无限放大,组件管理不规范、编译时间长、工程文件合并冲突、Xcode默认非彻底编译隔离等等问题,导致开发人员在开发环境上耗费了大量时间。目前业界较流行的工具对于大规模工程的支持力度相对较弱,实践起来总是有些掣肘,难以达到理想状态。 EasyBox的诞生,就是致力于为超级App量身打造一套现代、高效、优雅的研发工具链。 这篇文章的主要目的是 站在工具链的角度 上,分享一下我们在实践工程化过程中一些经验。 概述 EasyBox主体由工程组装器(Installer)、多仓库管理工具(MGit)、二进制管理工具(LFS)三部分构成,分别负责工作区的构建(组件依赖分析、工程的生成与组合)、源码仓库的管理以及二进制的管理。EasyBox架构图: 由多仓库管理工具克隆所需仓库源码,由二进制管理工具下载二进制包

一种简单优雅的TextView行间距适配方案

爱⌒轻易说出口 提交于 2020-04-09 06:14:50
本文作者:yanxin1563 原创 zhanghao 背景 Android的屏幕碎片化严重,各种屏幕分辨率层出不穷,而在不同分辨率的屏幕上显示出一致的效果,是百度App的研发团队和视觉团队共同追求的目标。 在百度App的Android开发中,TextView的行间距屏幕适配问题在研发和视觉之间纠缠已久。 该图为热议页面的图文模板在三款设备上的显示效果。可以看到TextView的行间距在三款设备下的一致性表现不尽如人意,而这已成为日常UI开发以及视觉review过程中的一大痛点,降低了大家的工作效率。 下面将探索一种简单优雅的的TextView行间距适配方案。 分析 先来分析下TextView在不同设备上行间距表现不一致的原因。百度App的UI团队使用Sketch工具来进行UI设计以及UI review,因此本文接下来字体尺寸的测量都借助Sketch工具完成。 先看下面一个简单的xml布局: <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="虽然此视图的实际布局取决于其父视图和任何同级视图中的其他属性。虽然。。。" android:textSize="16dp"/>

一种简单优雅的TextView行间距适配方案

元气小坏坏 提交于 2020-04-08 01:21:15
本文作者:yanxin1563 原创 zhanghao 背景 Android的屏幕碎片化严重,各种屏幕分辨率层出不穷,而在不同分辨率的屏幕上显示出一致的效果,是百度App的研发团队和视觉团队共同追求的目标。 在百度App的Android开发中,TextView的行间距屏幕适配问题在研发和视觉之间纠缠已久。 该图为热议页面的图文模板在三款设备上的显示效果。可以看到TextView的行间距在三款设备下的一致性表现不尽如人意,而这已成为日常UI开发以及视觉review过程中的一大痛点,降低了大家的工作效率。 下面将探索一种简单优雅的的TextView行间距适配方案。 分析 先来分析下TextView在不同设备上行间距表现不一致的原因。百度App的UI团队使用Sketch工具来进行UI设计以及UI review,因此本文接下来字体尺寸的测量都借助Sketch工具完成。 先看下面一个简单的xml布局: <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="虽然此视图的实际布局取决于其父视图和任何同级视图中的其他属性。虽然。。。" android:textSize="16dp"/>

一种简单优雅的TextView行间距适配方案

旧街凉风 提交于 2020-04-07 05:34:51
本文作者:yanxin1563 原创 zhanghao 背景 Android的屏幕碎片化严重,各种屏幕分辨率层出不穷,而在不同分辨率的屏幕上显示出一致的效果,是百度App的研发团队和视觉团队共同追求的目标。 在百度App的Android开发中,TextView的行间距屏幕适配问题在研发和视觉之间纠缠已久。 该图为热议页面的图文模板在三款设备上的显示效果。可以看到TextView的行间距在三款设备下的一致性表现不尽如人意,而这已成为日常UI开发以及视觉review过程中的一大痛点,降低了大家的工作效率。 下面将探索一种简单优雅的的TextView行间距适配方案。 分析 先来分析下TextView在不同设备上行间距表现不一致的原因。百度App的UI团队使用Sketch工具来进行UI设计以及UI review,因此本文接下来字体尺寸的测量都借助Sketch工具完成。 先看下面一个简单的xml布局: <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="虽然此视图的实际布局取决于其父视图和任何同级视图中的其他属性。虽然。。。" android:textSize="16dp"/>

一种简单优雅的TextView行间距适配方案

冷暖自知 提交于 2020-04-06 19:23:23
本文作者:yanxin1563 原创 zhanghao 背景 Android的屏幕碎片化严重,各种屏幕分辨率层出不穷,而在不同分辨率的屏幕上显示出一致的效果,是百度App的研发团队和视觉团队共同追求的目标。 在百度App的Android开发中,TextView的行间距屏幕适配问题在研发和视觉之间纠缠已久。 该图为热议页面的图文模板在三款设备上的显示效果。可以看到TextView的行间距在三款设备下的一致性表现不尽如人意,而这已成为日常UI开发以及视觉review过程中的一大痛点,降低了大家的工作效率。 下面将探索一种简单优雅的的TextView行间距适配方案。 分析 先来分析下TextView在不同设备上行间距表现不一致的原因。百度App的UI团队使用Sketch工具来进行UI设计以及UI review,因此本文接下来字体尺寸的测量都借助Sketch工具完成。 先看下面一个简单的xml布局: <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="虽然此视图的实际布局取决于其父视图和任何同级视图中的其他属性。虽然。。。" android:textSize="16dp"/>

百度App iOS工程化实践: EasyBox破冰之旅

半世苍凉 提交于 2020-04-05 22:32:58
本文作者:yanxin1563 本文作者: Yunpeng-基础技术 前言 百度App从单一的搜索工具发展到今天以搜索和Feed流为双引擎的综合性内容消费服务平台,其复杂程度已然不可同日而语矣。 作为一个日活过亿的超级App,业务规模庞大,相关技术人员超过千人,客户端支持主流的移动技术,涉及近百业务方,技术形态复杂,各种组件近三百个,代码百万量级,由此带来的工程化问题是技术团队的一个极大挑战。 项目的膨胀导致了很多不起眼的小问题被无限放大,组件管理不规范、编译时间长、工程文件合并冲突、Xcode默认非彻底编译隔离等等问题,导致开发人员在开发环境上耗费了大量时间。目前业界较流行的工具对于大规模工程的支持力度相对较弱,实践起来总是有些掣肘,难以达到理想状态。 EasyBox的诞生,就是致力于为超级App量身打造一套现代、高效、优雅的研发工具链。 这篇文章的主要目的是 站在工具链的角度 上,分享一下我们在实践工程化过程中一些经验。 概述 EasyBox主体由工程组装器(Installer)、多仓库管理工具(MGit)、二进制管理工具(LFS)三部分构成,分别负责工作区的构建(组件依赖分析、工程的生成与组合)、源码仓库的管理以及二进制的管理。EasyBox架构图: 由多仓库管理工具克隆所需仓库源码,由二进制管理工具下载二进制包,然后组装器根据描述表生成对应工程