口头BB篇
a.不需要记全,理解后整理成自己的话,问起来能答个123即可,在答上的基础上,再主动延伸一些实例,或文章中的二级问题。如别人问内存泄露是怎么引起的,在答出理由后,主动举出一些实例。
b.会回答到的常用英语单词一定要熟读,回答的时候飙英语单词一个要有底气,别一个onMeasure都读错0.0。
1.什么是多态?
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为
方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding)
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
多态的实现方式
方式一:重写:
方式二:接口
方式三:抽象类和抽象方法
运行时多态
继承父类和实现接口时,父类引用指向子类对象。
编译时多态(非严格意义多态)
其实从Java多态的定义来说 编译多态并不能真正算做多态,编译多态即方法重载,Java在编译时能够确定执行重载方法中的哪一个。
总结
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用);
四、变量不能被重写(覆盖),”重写”的概念只针对方法,如果在子类中”重写”了父类中的变量,那么在编译时会报错。
2.内存泄露的原因,和具体例子
内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无法及时释放。
部分例子
a.static关键字(静态集合类,单例) b.各种数据链接没有关闭 c.bitmap没调用recycle()等等
3.如何避免OOM
A.OOM是什么 首先OOM是什么?
当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后
这就会抛出 OutOfMemoryException 也就是OOM
B. 如何避免
减少内存对象的占用(不需记全,优先记忆图片处理的几个)
I.ArrayMap/SparseArray代替hashmap
II.避免在android里面使用Enum
III.减少bitmap的内存占用
inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
IV.减少资源图片的大小,过大的图片可以考虑分段加载
内存对象的重复利用
大多数对象的复用,都是利用对象池的技术。
I.listview/gridview/recycleview contentview的复用
II.inBitmap 属性对于内存对象的复用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8
这个方法在某些条件下非常有用,比如要加载上千张图片的时候。
III.避免在ondraw方法里面 new对象
IV.StringBuilder 代替+
4.ANR是什么?如何避免?
Application Not Responding
也就是在规定的时间内,没有响应。
三种类型:
1). KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应
2). BroadcastTimeout(10 seconds) –BroadcastReceiver在特定时间内无法处理完成
3). ServiceTimeout(20 seconds) –小概率类型 Service在特定的时间内无法处理完成
为什么会超时:事件没有机会处理 & 事件处理超时
怎么避免ANR
ANR的关键
是处理超时,所以应该避免在UI线程,BroadcastReceiver 还有service主线程中,处理复杂的逻辑和计算
而交给work thread操作。
1)避免在activity里面做耗时操作,oncreate & onresume
2)避免在onReceiver里面做过多操作
3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。
4)尽量使用handler来处理UI thread & workthread的交互。
如何调查并解决ANR
1:首先分析log
2: 从trace.txt文件查看调用stack.
3: 看代码
4:仔细查看ANR的成因(iowait?block?memoryleak?)
5.如何捕获全局未捕获的异常
1.记忆勾——–全局首先想到application里面
2.关键是实现Thread.UncaughtExceptionHandler
然后是在application的oncreate里面注册。
//待更新
8.描述一下 android 的系统架构
6.Devik 进程,linux 进程,线程的区别
6.android线程间通讯
7.进程间通讯
8.线程同步的异步
9.请介绍下Android的数据存储方式。
10.动画
11.四大组件
11.启动模式
12.组件之间的通讯
//待更新