/Android

Demo code and document

Primary LanguageJava

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编码模式
视频直播协议
深入浅出看流媒体前世今生,分分钟二逼变牛逼
流媒体|从入门到出家:流媒体协议—FLV

H264

H.264 码流结构解析
采用工具软件分析h264文件
FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

测试及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启动模式图文详解

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源码及其他        

如何提升 VR 渲染的性能?        

Adreno GPU Profiler工具使用总结

Squeezing Performance out of your Unity Gear VR Game

Optimizing VR Graphics with Late Latching

Optimisation for VR in Unity

VR声音

VR声音入门  
HRTF音频3D定位技术综述
HRTF 3D音效简明算法
HRTF Sound Localization

VR视觉

VR视觉有三个关键技术指标:延迟时长(一般要低于20ms)、帧率(一般要高于90)、分辨率(一种指头显,现在2K是主流,向4K升级中)。如果这三个技术指标不达标,会导致炫晕或画面颗粒感。炫晕的本质是人的视觉系统(看到的图像)与前庭系统之前的不一致或不同步引发的冲突。
先看下面的链接科普下:

VR为何会延迟?Oculus首席科学家解惑
一篇看盡「VR 暈眩」的原因以及解決之道
为什么VR游戏玩完后会头晕、恶心?
全景视频JS组件

其他

下载Google Play上的App

心得体会

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

项目团队

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

产品

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