Android开发Android高级进阶Android开发

2019中级Android开发面试解答之线程篇

2019-06-14  本文已影响17人  小小小小怪兽_666

注:因为实际开发与参考答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解!面试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。

1.线程池的好处? 四种线程池的使用场景,线程池的几个参数的理解?

参考回答:

使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或则“过度切换”的问题,归纳总结就是

Android中的线程池都是直接或间接通过配置ThreadPoolExecutor来实现不同特性的线程池.Android中最常见的类具有不同特性的线程池分别为:

通过源码可以了解到上面的四种线程池实际上还是利用 ThreadPoolExecutor 类实现的


2.Android中还了解哪些方便线程切换的类?

参考回答:

3.讲讲AsyncTask的原理

参考回答:

4.IntentService有什么用 ?

参考回答:

IntentService可用于执行后台耗时的任务,当任务执行完成后会自动停止,同时由于IntentService是服务的原因,不同于普通Service,IntentService可自动创建子线程来执行任务,这导致它的优先级比单纯的线程要高,不容易被系统杀死,所以IntentService比较适合执行一些高优先级的后台任务。

5.直接在Activity中创建一个thread跟在service中创建一个thread之间的区别?

参考回答:

6.ThreadPoolExecutor的工作策略 ?

参考回答:ThreadPoolExecutor执行任务时会遵循如下规则

7.Handler、Thread和HandlerThread的差别?

参考回答:

8.ThreadLocal的原理

参考回答:

ThreadLocal是一个关于创建线程局部变量的类。使用场景如下所示:

当需要使用多线程时,有个变量恰巧不需要共享,此时就不必使用synchronized这么麻烦的关键字来锁住,每个线程都相当于在堆内存中开辟一个空间,线程中带有对共享变量的缓冲区,通过缓冲区将堆内存中的共享变量进行读取和操作,ThreadLocal相当于线程内的内存,一个局部变量。每次可以对线程自身的数据读取和操作,并不需要通过缓冲区与 主内存中的变量进行交互。并不会像synchronized那样修改主内存的数据,再将主内存的数据复制到线程内的工作内存。ThreadLocal可以让线程独占资源,存储于线程内部,避免线程堵塞造成CPU吞吐下降。

在每个Thread中包含一个ThreadLocalMap,ThreadLocalMap的key是ThreadLocal的对象,value是独享数据。

9.多线程是否一定会高效(优缺点)

参考回答:
多线程的优点:

多线程的缺点:

综上得出,多线程不一定能提高效率,在内存空间紧张的情况下反而是一种负担,因此在日常开发中,应尽量

10.多线程中,让你做一个单例,你会怎么做
参考回答:

11.除了notify还有什么方式可以唤醒线程

参考回答:

12.什么是ANR ? 什么情况会出现ANR ?如何避免 ? 在不看代码的情况下如何快速定位出现ANR问题所在 ?

参考回答:

到此线程篇就结束了,需要更多Android学习资料的可以加我的合作QQ群:925019412

今日更新视频:Android Native

  1. JNI是什么。
  2. Native方法注册。
  3. JNI数据类型转换。
  4. Native与Java如何通信。
上一篇下一篇

猜你喜欢

热点阅读