Android 常见面试问题

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是直接在内存中读写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值