1、Android的四大组件
2、startService 和 bindService的区别
3、常见的设计模式
4、什么是单列模式以及单例模式的特点
答:确保某个类只有一个实例,并且自行实例化,像整个系统提供这一实例。构造方法私有化,外部无法访问。
5、自定义View的相关方法,以及每个方法实现的内容
6、什么是内存溢出、内存泄漏,以及如何避免
内存泄漏的定义:
不再使用的对象持续占用内存或者内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。严重时会产生内存溢出(OOM)。
常见的内存泄漏:
1.资源对象没有关闭:
(1)注册广播接收器后没有调用unregisterReceiver()方法注销广播接收器。
(2)打开文件流之后没有调用close()方法关闭文件流。
(3)数据库游标cursor使用完后没有调用close()方法关闭游标。
(4)图片资源Bitmap使用完之后没有调用recycle()方法回收。
2.生命周期长的对象持有生命周期短的对象的引用,导致生命周期短的对象内存无法被回收(1)单例模式或者静态成员变量的生命周期和应用程序的生命周期相等,当需要引用Context时,如果传入的是Activity的Context,Activity需要被销毁时就无法被回收。解决方法是传入Application的Context,因为Application的Context生命周期等于应用程序的生命周期。
(2)非静态内部类(匿名内部类、Handler等)默认持有外部类的引用,如果非静态内部类的对象实例生命周期比外部类生命周期长(比如非静态内部类定义了一个静态的对象实例),外部类注销时就无法被系统回收,从而导致内存泄漏。解决方法是采用静态内部类+弱引用的方式。
内存溢出的定义:
Android系统中每一个应用程序可以向系统申请一定的内存,当申请的内存不够用的时候,就产生了内存溢出。
内存溢出的原因:
1.内存泄漏过多。
2.内存中加载的数据量超过内存的可用量。
3.集合类(用于存储对象的引用)中有对对象的引用,使用完后未清空。
4.申请的内存不够。
5.死循环或者循环产生过多对象实例,导致大量内存被消耗。
7、什么是强引用,弱引用,软引用,虚拟引用
8、什么是Handler以及Handler的相关机制
9、Handler的内存泄漏如何处理
10、什么是AIDL,以及实现原理
11、说说 Glide 的缓存模式
12、rxjava 常用的使用方法以及使用场景
13、什么是mvc、mvp、mvvm,以及他们的区别和优缺点
14、常见的动画有哪些
15、什么是ANR,以及如何避免,当出现ANR的时候主要看日志的哪些信息?
16、app可以开启多进程吗?
17、app有优化有哪些方面?
18、ListView 嵌套ListView 是出现卡顿如何处理?
19、什么是相对布局和绝对布局以及他们的优缺点
20、事件的分发机制什么
21、activity的启动机制是什么
22、谈谈你了解的数据结构和算法
23、Java的序列化和Android的序列化的区别。
答:主要是要了解Serializable序列化Parcelable序列化。Android的Parcelable序列化比Serializable效率更高、性能更好。Parcelable的出现为了满足数据在内存中低开销而且高效地传递问题。Parcelable是直接在内存中读写。