2019Android面试题心血总结

136 篇文章 1 订阅
98 篇文章 1 订阅

814268e3gy1fqdnwhhwm8j20c80c875e.jpg
2019即将进入尾声,趁着双十一之后的空闲时期,整理下Android面试题。

第一次看文章的朋友可以关注我的专栏,会不定期发布Android面试内容、进阶专题等等。

面试合集

Android学习PDF+源码笔记+面试文档+进阶视频​

面试总结.png

1.Activity中的几种启动模式

2.android消息机制

3.IntentService

IntentService是google在原生的Service基础上通过创建子线程的Service。也就是说IntentService是专门为android开发者提供的能在service内部实现耗时操作的service。我们可以通过重写onHandleIntent方法实现耗时操作的回调处理,而且IntentService在耗时操作完成后,会主动销毁自己,IntentService可以通过多次启动来完成多个任务,而IntentService只会被创建一次,每次启动的时候只会触发onStart方法。内部是实现了Handler异步处理耗时操作的过程,一般多用在Service中需要处理耗时操作的功能。

提问:为什么IntentService中能实现耗时操作?

  • 在onCreate中,通过HandlerThread来开启一条线程,而HandlerThread线程中会跟我们平常用的Handler不太一样,在run方法中创建了looper对象,所以HandlerThread能让IntentService在子线程中使用handler达到耗时操作。

4.HandlerThread

HandlerThread本身也是Thread,只是在Thread基础上封装上了Handler的载体,并且在run方法中创建了looper对象,这也是为什么在IntentService中能在HandlerThread中直接用handler的原因。而我们知道一个线程是可以有多个handler,所以用HandlerThread更加方便我们不用关心Handler的创建,一般用在多线程中直接处理任务。

5.事件分发

6.android性能优化、内存优化

7.内存优化

内存优化通常指的内存溢出,主要涉及到的问题还是该释放的资源,没有及时让GC处理器回收,通常主要表现是动画、上下文对象、EventBus、AsycTask、Handler、单例Bitmap都会影响,通常要做的是释放他们未终止的动作,释放锁定的上下文对象。

在实际项目有mvp架构的时候,需要注意内存泄漏的问题,p层如果长期持有v层的实例,导致v层的对象难以回收,而v层一般是activity或fragment作为抽象,因此需要在p层使用v层的弱应用或是在p层中实现v层的销毁方法,处理销毁的逻辑。

8.View的绘制

9.App启动流程

10.Eventbus原理

11.Rxjava的操作符有哪些,说说他们的作用

just:将同种数据源组合放到被观察者上面

from:将类似数组、集合的数据源放到被观察者上面

map:将一种数据源,转化成另外一种

flatmap:将一种数据源,转化成另外一种数据,并且被转化的数据是乱序排列的

concatmap:将一种数据源,转化成另外一种数据,并且被转化的数据是按照先前的数据源顺序排序的

toList:将数组的形式转化成List集合

subscribeOn:设置Observable的call方法所在的线程,也就是数据来源的线程

observeOn:设置subscribe的call方法所在的线程,也就是数据处理的线程

filter:在被观察者的数据层过滤数据

onErrorResumeNext:出错的时候,可以指定出错的时候的被观察者

retryWhen:出错的时候,重新走一遍被订阅的过程

concat:合并相同类型的被观察者到一个被观察者身上,有点类似集合、数组拼接数据。

zip:处理多种不同结果集的数据发射,一般用得多的地方是多个网络请求组合然后统一处理业务逻辑。 还有很多操作符就自己去看,这些操作符已经够面试用的了。

12.线程锁 锁方法和类对象啥的有啥区别

线程锁锁方法:是需要等到该线程用完了该方法才能释放同步锁 线程锁锁类对象:是需要等到该线程用完了该类对象才能释放同步锁 区别:是锁方法的区域要小 锁类对象包括了该类的所有属性

13.AsyncTask原理

14.说说MVP和MVVM的特点

15.android中用到的观察者模式有哪些地方

16.说说google新出的Lifecycle框架

将类的生命周期方法移交到Lifecycle中管理,实现对类的生命周期的监听,从而在Lifecycle中处理生命周期的逻辑代码。

这里涉及到几个对象: LifecycleObserver接口( Lifecycle观察者):实现该接口的类,通过注解的方式,可以通过被LifecycleOwner类的addObserver(LifecycleObserver o)方法注册,被注册后,LifecycleObserver便可以观察到LifecycleOwner的生命周期事件。

LifecycleOwner接口(Lifecycle持有者):实现该接口的类持有生命周期(Lifecycle对象),该接口的生命周期(Lifecycle对象)的改变会被其注册的观察者LifecycleObserver观察到并触发其对应的事件。

Lifecycle(生命周期):和LifecycleOwner不同的是,LifecycleOwner本身持有Lifecycle对象,LifecycleOwner通过其Lifecycle getLifecycle()的接口获取内部Lifecycle对象。

State(当前生命周期所处状态):几种事件状态。 Event(当前生命周期改变对应的事件):当Lifecycle发生改变,事件状态的回调event

17.okhttp原理

18.Retrofit原理

19.RxJava 的线程切换原理

  • RxJava通过subscribeOn指定被观察者发生的线程,observeOn指定观察者发生的线程。其中http://Schedulers.IO生成的是IoScheduler。

通过观察者与被观察者订阅的过程中,首先会触发被观察者的subscribeActual方法,在该方法中,可以看到最终会走scheduler的schedule方法,所以上面提到的IoScheduler实际是调用了它的schedule方法,最终会在NewThreadWorker里面生成ScheduledExecutorService对象,

而ScheduledExecutorService实际是由ScheduledThreadPoolExecutor创建的一个核心线程,最大线程个数是Integer.MAX_VALUE的线程池。最终会由ScheduledThreadPoolExecutor的submit或schedule方法执行传过来的Runnable对象,而Runnable执行的是被观察者的subscribe方法。所以解释了被观察者的subscribe方法是在子线程中执行的。

  • observeOn是观察者发生的线程,AndroidSchedulers.mainThread()实质是HandlerScheduler对象,而在观察者部分,最终观察部分会走Scheduler的scheduleDirect方法,而HandlerScheduler的该方法里面包装了一个ScheduledRunnable对象,通过主线程的handler.postDelayed处理这个runnable对象。

20.RecyclerView源码、缓存分析

21.Binder机制

22.Android Jetpack

23.系统打包经过了哪几个流程

24.Kotlin

kotlin使用了一组新的语法糖,kotlin不让变量初始化空的类型,强大的非空设计思想比java要人性化,在代码编写阶段就有提示开发者的好处。还有它的内联函数,函数体作为返回值的各种简写方式使更多的人愿意接受kotlin。它的协成开发比较好的控制线程之间切换的多层嵌套的问题,以及它简洁的语法,比较受开发者青睐。

还有Java语言进阶与内核、Android进阶、移动架构师项目、微信小程序员开发、跨平台flutter开发等学习视频。
面试合集

Android学习PDF+源码笔记+面试文档+进阶视频​

596aa003f6d44ac9b29a708a0151f477.jpg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值