标记清除算法 Mark-Sweep
复制算法 Copying
标记压缩算法 Mark-Compact
分代收集算法
-
profiler
-
MemoryAnalyzer
-
leakcanary
-
单例
-
handler
-
静态变量
-
匿名内部类
-
注册与取消注册
-
定时任务
-
资源关闭
-
属性动画
-
webview内存泄漏(开个新进程)
-
其它注意事项:
基本数据类型用static final 替换static;
使用for循环还是迭代器Iterator对比:
采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快
采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快
从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.
而使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样.(还是说明了一点遍历和集合本身分离了)
====================================================================
-
API接口设计:多个api得到的数据合并一个api得到;
-
GZip压缩request和response;
-
Protocol Buffer代替json;
-
获取图片的URL告知服务器所需图片的宽高;
比如根据不同网络条件返回不同大小图片;采用webp;
-
大文件下载断点续传;
-
增量包:bsdiff和bspatch;
-
网络请求的数据进行缓存;
比如将网络请求得到的数据放入数据库,每次加载页面先从数据库获得,等获取到网络数据后更新UI和数据库;
- JobScheduler在wifi情况下进行下载任务,比如广告等;
5.0后用JobScheduler,8.0后用WorkManager。
- webview加载,涉及到前端html页面优化ÿ