安卓进阶理论整理合集
http://www.jianshu.com/p/5ca4ccf80914
1:LRUCache原理
内存-文件-网络三级缓存,也就是加载图片的时候首先从内存缓存中取,如果没有再从文件缓存中取,如果文件缓存没有取到,就从网络下载图片并且加入内存和文件缓存
LRU即Least Recently Used,近期最少使用算法。也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移除,有效的避免了OOM的出现
LruCache中将LinkedHashMap双向链表的顺序设置为LRU顺序来实现LRU缓存,(get,put,remove)每次调用get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。调用put插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象(近期最少用到的)移除,避免oom.
2:模块化实现(好处,原因)
人员的增多,业务的复杂,多人对同一代码处理起来困难.
project=====>module A + module B =======>共同引用资源Lib
3:JVM
每个JVM都有两种机制:
①类装载子系统:装载具有适合名称的类或接口
②执行引擎:负责执行包含在已装载的类或接口中的指令
·每个JVM都包含:
方法区、Java堆、Java栈、本地方法栈、指令计数器及其他隐含寄存器
4:视频加密传输
加密:获取到所有字节后增加字节生成问题
解密:调用跳过字节,重新生产新的文件.
inputStream while write====>outputStream
5:统计启动时长,标准
(1)冷启动:第一次启动,该activity不存在,会在进程中重新创建,也会第一次执行application(2)热启动:已经启动过了,只是在后台,再次启动不会new application(3)首次启动:初始化application,创建文件目录,初始化SP
1:adb shell am start -w packagename/activity
2:
如果记录冷启动启动时间一般可以在 Application.attachBaseContext() 开始的位置记录起始时间点,因为在这之前 Context 还没有初始化,一般也干不了什么事情,当然这个是要视具体情况来定,其实只要保证在 App 的具体业务逻辑开始执行之前记录起始时间点即可。如果记录热启动启动时间点可以在 Activity.onRestart() 中记录起始时间点
结束时间点理论上要选在 App 显示出第一屏界面的时候,但是在什么位置 App 显示出第一屏界面呢?Activity.onWindowFocusChanged
6:如何保持应用的稳定性
(1)改进Crash上报系统,解决Crash问题
(2)灰度发布,一小部分人先用,有bug在改进
(3)热修复