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内存管理机制及常见的内存分析工具。
省电
相比内存,电池更是智能机(不仅仅是android机)的痛点,一天一充已是极限。 电池的消耗,除系统及显示屏外,就是app了。“又想马儿跑,又想马儿不吃草”,难!要省电,先了解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缓存机制浅析》。
架构
音视频与直播技术
2016年直播应用大爆发,总结直播相关的技术问题。建议先看下《移动直播技术秒开优化经验(含PPT)》,对视频直播的整个技术栈及相关问题有比较清晰的描述。
移动直播技术秒开优化经验(含PPT)
H264编码模式
视频直播协议
深入浅出看流媒体前世今生,分分钟二逼变牛逼
流媒体|从入门到出家:流媒体协议—FLV
H264
H.264 码流结构解析
采用工具软件分析h264文件
FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分
测试及app质量
测试能保证版本没有明显的Bug,但不能通过测试来保证App的质量。没有Bug不一定是有质量的,有质量的App需要开发、产品和用户一起打造。总结一些从技术上能提升与验证质量的一些方法。
Crash及ANR捕捉上报
代码质量检查
独家分享【Android ANR的成因分析及分析定位技术】
ANR机制以及问题分析
编程技术
与语言无关的一些编程技术与**。
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启动模式图文详解
Unity
协程
Unity3D之Mesh
Execution Order of Event Functions
Unity资源路径及加载外部资源介绍
A guide to AssetBundles and Resources
Unity lifetime management for IDisposable, part 1
Unity性能
性能的核心在GPU与CPU使用,如何提高使用效率或减少使用,是优化的关键。了解与性能相关渲染知识,使用相关的优化工具,是优化的基本套路。
UGUI源码及其他
Squeezing Performance out of your Unity Gear VR Game
Optimizing VR Graphics with Late Latching
VR声音
VR声音入门
HRTF音频3D定位技术综述
HRTF 3D音效简明算法
HRTF Sound Localization
VR视觉
VR视觉有三个关键技术指标:延迟时长(一般要低于20ms)、帧率(一般要高于90)、分辨率(一种指头显,现在2K是主流,向4K升级中)。如果这三个技术指标不达标,会导致炫晕或画面颗粒感。炫晕的本质是人的视觉系统(看到的图像)与前庭系统之前的不一致或不同步引发的冲突。
先看下面的链接科普下:
VR为何会延迟?Oculus首席科学家解惑
一篇看盡「VR 暈眩」的原因以及解決之道
为什么VR游戏玩完后会头晕、恶心?
全景视频JS组件
其他
心得体会
从PC角度看移动端开发技术
技术方案的选择也要考虑用户的价值与利益
沟通与团队合作
自省沟通
这个Bug改不改?
工作沟通要带有目的
目标沟通,SMART原则
《情商》读后感之一
修心,让自己安静下来
项目团队
我在Facebook的十点经验分享
知乎上的面试经验(汤涛)
最近面试总结
手游宝一年的总结
评价与考核
技术Leader的职责