clarkehe edited this page Nov 4, 2016 · 87 revisions

Binder与Ashm

为什么将Binder与Ashm匿名共享内存放在开头,因为Binder与Ashm是Android在Linux内核上新加的机制,都是IPC机制。Binder是整个Android系统的核心机制,理解Binder对理解整个系统至关重要。对于Binder机制的介绍可以看universus写的《Android Binder设计与实现》。另外还两个老外介绍Binder的PPT也不错。

Android Binder设计与实现 - 设计篇
inter-process method invocation in Android (相对入门一点,可以先看这个)
Deep Dive into Android IPC:Binder Framework
android与linux的关系 (看前几页PPT就好了)

Android的匿名共享内存机制是在内核实现的,也是基于Linux内核本身的共享内存机制,作了一层封装。Android提供了匿名共享内存的C运行库访问接口(但NDK不能使用),Java层也有访问接口,就是MemoryFile.java,通过研究MemoryFile可以了解匿名内存的机制。

An Introduction to Android Shared Memory
Android Binder 分析——匿名共享内存(Ashmem)
Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划

Linux下的IPC机制,有System V and POSIX两个标准,提供的接口会不一样,其中就有共享内存的访问接口(shm_open/shmget),但在NDK下这两套接口都不能用。

Linux System V and POSIX IPC Examples

绘制系统

绘制系统,关键就是了解SurfaceFlinger服务进程工作原理,知道有硬件绘制与软件绘制。在应用层,需要知道View、Surface、SurfaceHolder 、SurfaceTexture、SurfaceView、GLSurfaceView、TextureView的用法及区别。结合实际经验及源码,对Surface及SurfaceTexure进行了初步的分析。

Surface
SurfaceTexture
Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
Android Graphics

网络

移动端除了WIFI还有移动网络(弱网络)。移动网络是一个优势,可以实时在线并访问网络。移动网络的主要问题有:低速、高延迟、流量有成本、连接不稳定等,这些问题是在实际开发中要面对的。

两个概念,延迟与丢包率
域名劫持

内存

手机内存更大的了,多至4G、6G,但内存依然是稀缺的。Android没有虚拟内存,再加上更多app驻留后台,内存还是不够用。作为有良心的app,没有必要不要驻留后台,更应减少内存的占用。android开发要面临的内存问题有:内存泄露、内存溢出、内存占用过多(导致驻留后台被系统回收),GC导致卡顿等问题。要解决这些问题,要了解android内存管理机制及常见的内存分析工具。

App内存浅析

省电

相比内存,电池更是智能机(不仅仅是android机)的痛点,一天一充已是极限。 电池的消耗,除系统及显示屏外,就是app了。“又想马儿跑,又想马儿不吃草”,难!要省电,先了解android的电源管理机制,再学会用工具定量对的耗电进行测试。

手机休眠引发的“血案”
Android休眠机制

性能优化

性能优化就是减少卡顿,提高帧率(FPS)。帧率的降低,是因为没能在16ms内完成一帧的绘制。在熟悉android的绘制系统后,通过测试app实际的帧率了解流畅度,再通过系统提供的方法与工具来定位性能的关键点。

使用SysTrace定位及优化性能问题实战
Android Performance Case Study (老外写的很经典的性能优化的实践)

热补丁与插件化

2016年,热补丁技术很火,TX就出了三个方案,阿里出了两个方案,以WX出的Tinker方案最有代表性,Tinker已经开源。 理解插件机制,要理解Android下Dex文件及Class的加载机制,虚拟机不同实现对补丁方案也有影响。

插件化技术的比较早一点,开源的方案也比较多。插件用的技术与热补丁有一些相似之处,不同的要处理四大组件的生命周期。

ClassLoader与MultiDex分包 (插件与补丁的基础知识)
补丁方案及原理

包大小

有一定大小的安装包,是Native应用一个痛点,下载要时间,安装也要时间,还会占用户空间(要注意:安装包10MB大小,安装完成后实际占用是10MB的几倍空间)。用户的空间也是有限的,16G的手机不少,基本不够用,经常要清理手机空间。除包大小尽量优化外,App在使用过程中也不要产生不必要的数据占用用户空间,如果占用过多,自动清理或有手动清理的渠道。

Shrink Your Code and Resources (先按照官方指南在打包时,清掉无有的代码与资源)
安装包立减1M--微信Android资源混淆打包工具

H5

H5与Native之争,没有高下,现在都是Hybrid App(混合型应用)。H5有自己的优势,但也有三个突出的问题:加载慢、耗流量、性能(体验)相对差、有兼容性问题。对于H5要扬长避短,发挥其优势,解决其不足。对于性能问题,可参考之前写的《H5缓存机制浅析》。

H5缓存机制浅析-移动端Web加载性能优化

###架构

###音视频与直播技术 2016年直播应用大爆发,总结直播相关的技术问题。建议先看下《移动直播技术秒开优化经验(含PPT)》,对视频直播的整个技术栈及相关问题有比较清晰的描述。

移动直播技术秒开优化经验(含PPT)
H264编码模式
视频直播协议

测试及app质量

测试能保证版本没有明显的Bug,但不能通过测试来保证App的质量。没有Bug不一定是有质量的,有质量的App需要开发、产品和用户一起打造。总结一些从技术上能提升与验证质量的一些方法。

Crash及ANR捕捉上报
代码质量检查
独家分享【Android ANR的成因分析及分析定位技术】
ANR机制以及问题分析

编程技术

与语言无关的一些编程技术与思想。

侵入式接口、反向控制、依赖注入
RxJava

Android实践

Activity生命周期中的onSaveInstanceState
事件分发机制
Service Intent must be explicit 异常解决
Set service foreground with notification
Get running app for Android 5.1
国产机的那些坑
Dialog、AlertDialog、PopupWindow、DialogFragment
View三大属性参数:attrs、defStyleAttr、defStyleRes
Fragment常见的坑
Glide使用及注意的地方
Activity启动模式图文详解

心得体会

从PC角度看移动端开发技术
技术方案的选择也要考虑用户的价值与利益
沟通与团队合作
自省沟通
这个Bug改不改?
工作沟通要带有目的
目标沟通,SMART原则
《情商》读后感之一
修心,让自己安静下来

项目团队

我在Facebook的十点经验分享
知乎上的面试经验(汤涛)
最近面试总结
手游宝一年的总结
评价与考核
技术Leader的职责

产品

开发看产品
Pony对QQMail的邮件摘录
马化腾培训教材:让产品自己召人
产品设计与用户体验--马化腾

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.