【朝花夕拾】Android性能篇之(八)来自官网的自白
前言
转载请声明,转自【https://www.cnblogs.com/andy-songwei/p/10823372.html】,谢谢!
Android性能优化无疑是Android中的一个重点,也是一个难点。之所以说是重点,是因为无论在面试中还是工作中,都是“备受青睐”的:从笔者面试经验来看,面试官对性能相关的问题是乐此不疲;从工作经验来看,越是大厂,越是对代码质量苛刻,基本功能完成后,都需要对性能做一定的把控。之所以说是难点,是因为工作中性能优化的任务往往都是由经验比较丰富的工程师或者架构师来担任的,经验尚浅的童鞋往往力不从心。而且Android性能方面的问题比较广,如电量、内存、代码效率、屏幕流畅度等方方面面,想成为这方面的行家里手,真心不是件容易的事情,更不用说把它们都了解透彻了。
所以,在笔者工作的前几年里,经常对这类问题一头雾水,开发的app中性能问题似乎无处不在,但想认真去学,却又不知道从何入手。后来笔者发现,在Android官网中有专门的章节来介绍性能相关的问题,有宏观的指导,有概括性的总结,有相关工具的介绍,有良好的编码实践介绍,还有丰富的资源链接......总的来说,官网给像我这样想专门去学习却又不知从何下手的童鞋一个很好的入门指导。由于官网中大部分都是英文的,所以笔者这里特意进行了翻译,希望从这里入手,来系统性地学习Android性能相关的知识点。
官网中的篇幅
官网中为性能问题专门开辟的章节路径为:Android Developers > Docs > 指南 > Best practies > Performance
中文版官网地址为:https://developer.android.google.cn/topic/performance
如下四幅截图为该部分专门的章节,有将近30篇文章的篇幅。


翻译后的文档链接
如上截图中,“Android Vitals”是Google Play中的一个工具,主要介绍这款工具以及如果通过这款工具来统计和分析性能相关的问题。由于该工具咱们平时的工作中接触不到,所有这里就没有翻译。“SMP Primer for Android”是一篇关于“对称多处理”入门教程,和CPU架构关系比较大,似乎和软件层的优化有点遥远,所以笔者暂时没读懂,所以也没有翻译,待以后有了深入的接触后,再补上。其它的一部分是中文版的官网中已经翻译了,剩余的为笔者的翻译了。
【进程和线程】
【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况
【官网翻译】性能篇(五)为电池寿命做优化——测试电源相关的问题
【缩减应用大小】
【在 Android Runtime (ART) 上验证应用行为】
在上述链接中,带有【官网翻译】前缀的,为笔者翻译的文章,都记录在了博客中。其它的为中文版官网中自带的翻译。
结语
所谓“学海无涯,回头是岸”,哈哈!笔者在翻译的过程中也是相当痛苦的,虽然只翻译了其中的10篇,但是也差不多花了一个月的业余时间来完成。由于经常长时间对着屏幕,经常有种眼睛累到要瞎的感觉。而且这还只是官网中“性能”篇幅中的一小部分,而“性能”系列也只是整个Android相关知识中的九牛一毛,有时候感觉技术这条路很远很长,走下去还真是需要勇气啊!希望笔者的这篇文章和翻译的系列文章能对读者有一定的启迪作用,也更希望有读者日后也能对笔者指点一二,笔者将不胜感激!另外,古人常说“实践出真知”,这里介绍的还只是一些理论知识,要想成为高手,还需要大量的工作实践。最后,引用屈原老夫子的名句来共勉吧:路漫漫其修远兮,吾将上下而求索!!!
【朝花夕拾】Android性能篇之(八)来自官网的自白的更多相关文章
- 【朝花夕拾】Android性能篇之(六)Android进程管理机制
前言 Android系统与其他操作系统有个很不一样的地方,就是其他操作系统尽可能移除不再活动的进程,从而尽可能保证多的内存空间,而Android系统却是反其道而行之,尽可能保留进程.An ...
- 【朝花夕拾】Android性能篇之(五)Android虚拟机
前言 Android虚拟机的使用,使得android应用和Linux内核分离,这样做使得android系统更稳定可靠,比如程序中即使包含恶意代码,也不会直接影响系统文件:也提高了跨平台兼容性.在And ...
- 【朝花夕拾】Android性能篇之(一)序言及JVM
序言 笔者从事Anroid开发有些年头了,深知掌握Anroid性能优化方面的知识的必要性,这是一个程序员必须修炼的内功.在面试中,它是面试官的挚爱,在工作中,它是代码质量的拦路虎,其重要 ...
- 【朝花夕拾】Android性能篇之(三)Java内存回收
在上一篇日志([朝花夕拾]Android性能篇之(二)Java内存分配)中有讲到,JVM内存由程序计数器.虚拟机栈.本地方法栈.GC堆,方法区五个部分组成.其中GC堆是一块多线程的共享区域,它存在的作 ...
- 十分钟掌握Pandas(上)——来自官网API
十分钟掌握Pandas(上)——来自官网API 其实不止10分钟,这么多,至少一天 一.numpy和pandas numpy是矩阵计算库,pandas是数据分析库,关于百度百科,有对pandas的介绍 ...
- 【朝花夕拾】Android性能篇之(八)ANR篇--草稿
1.ANR概念 2.ANR发生场景 Android开发者官网 上说到了两个原因:(1)点击按键或者触摸屏幕等输入事件在5s内没有响应:(2)10s内没有完成广播事件.如下所示: Android wil ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- 【朝花夕拾】Android性能篇之(四)Apk打包
前言 APK,即Android Package,是将android程序和资源整合在一起,形成的一个.apk文件.相信所有的Android程序员是在IDE的帮助下,完成打包轻而易举,但对打包流程真正清楚 ...
- 【工利其器】必会工具之(三)systrace篇(1)官网翻译
前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...
随机推荐
- 关于eclipse码代码时光标自动消失要重新点击输入框的问题
前几天码代码时在两个电脑都出现了同样的问题,就是在输入的时候,输入法突然从程序框切换到某不可名状的位置,要重新点击输入框才能解决.(后发现不但是eclipse,任何带有输入框的都会出现此问题) 经排查 ...
- poj 2955 Brackets (区间dp基础题)
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- item()方法遍历字典
Python字典的遍历方法有好几种,其中一种是for...in,这个我就不说明,在Python了几乎随处都可见for...in.下面说的这种遍历方式是item()方法. item() item()方法 ...
- 异常日志文件errorlong
#region log ////////////////////use/////////////// /// <summary> /// 异常日志 /// </summary> ...
- Java中接口和抽象类的区别?
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- 【CHRIS RICHARDSON 微服务系列】微服务架构中的进程间通信-3
编者的话 |本文来自 Nginx 官方博客,是微服务系列文章的第三篇,在第一篇文章中介绍了微服务架构模式,与单体模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构的应用客户端 ...
- 一键删除数据库所有的外键约束-FOREIGN_KEYS
DECLARE @ESQL VARCHAR(1000);DECLARE FCursor CURSOR --定义游标FOR (SELECT 'ALTER TABLE '+O.name+' DROP ...
- FontLab VI for Mac 键盘快捷键
使用FontLab VI for Mac,您可以创建,打开,修改,绘制,空间,文字,提示和导出桌面,网页,颜色和可变字体.该应用程序是一个全能的字体编辑器,但也支持与其他字体创建工具的数据交换,使其易 ...
- 「专题总结」LCT入门
上次xuefeng说我的专题总结(初探插头dp)太不适合入门了,所以这次丢一些题解包以外的东西. 关键是我自己也不会...急需梳理一下思路... (让我口胡数据结构???顺便推广一下全世界最短的lct ...
- react中报错Failed to set an indexed property on 'CSSStyleDeclaration': Index property setter is not supported
产生这个报错的原因是我当时将样式写到了less文件,我在div中使用的使用应该是使用className = ,而我误写了一个style = .style里面当然没有自定义的className,所以产生 ...