1.说一下java GC算法
参考这篇博客:https://blog.csdn.net/d6619309/article/details/53358250
大概就是分代回收
我们一般讨论的垃圾回收主要针对Java堆内存中的新生代和老年代,也正因为新生代和老年代结构上的不同,所以产生了分代回收算法,即新生代的垃圾回收和老年代的垃圾回收采用的是不同的回收算法。针对新生代,主要采用复制算法,而针对老年代,通常采用标记-清除算法或者标记-整理算法来进行回收。
2.Android中为什么主线程不会因为Looper.loop()方法造成阻塞
参考:https://www.zhihu.com/question/34652589
https://www.jianshu.com/p/cfe50b8b0a41
3.view的绘制过程
https://blog.csdn.net/guolin_blog/article/details/16330267
第一步:测量,确定大小
onMeasure()
第二步:布局,确定位置
onLayout()
第三步:绘制,总共可以分成六步
onDraw()
4.handler的send、post
https://blog.csdn.net/u013168615/article/details/47024073
post的延时是0?
5.java偏向锁、轻量锁和重量锁
https://blog.csdn.net/makecontral/article/details/79435933
6.安卓优化过的数据结构
https://blog.csdn.net/jasonwang18/article/details/70597665
7.LinearLayout和RelativeLayout性能对比-百度
- RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View2次onMeasure
- RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。
- 在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。
最后再思考一下文章开头那个矛盾的问题,为什么Google给开发者默认新建了个RelativeLayout,而自己却在DecorView中用了个LinearLayout。因为DecorView的层级深度是已知而且固定的,上面一个标题栏,下面一个内容栏。采用RelativeLayout并不会降低层级深度,所以此时在根节点上用LinearLayout是效率最高的。而之所以给开发者默认新建了个RelativeLayout是希望开发者能采用尽量少的View层级来表达布局以实现性能最优,因为复杂的View嵌套对性能的影响会更大一些。