1、Handler是什么
Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue
2、Handler使用方法
- post(runnable)
- sendMessage(message)
3、Handler工作原理
- Android进阶——Android消息机制之Looper、Handler、MessageQueen
- http://blog.csdn.net/qq_30379689/article/details/53394061
4、Handler引起的内存泄漏
-
原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放
-
解决:
-
Handler内部持有外部Activity的弱引用
-
Handler改为静态内部类
-
Handler.removeCallback()
##二、AsyncTask面试题
1、AsyncTask是什么
它本质上就是一个封装了线程池和Handler的异步框架
2、AsyncTask使用方法
-
三个参数
-
Params:表示后台任务执行时的参数类型,该参数会传给AysncTask的doInBackground()方法
-
Progress:表示后台任务的执行进度的参数类型,该参数会作为onProgressUpdate()方法的参数
-
Result:表示后台任务的返回结果的参数类型,该参数会作为onPostExecute()方法的参数
-
五个方法
-
onPreExecute():异步任务开启之前回调,在主线程中执行
-
doInBackground():执行异步任务,在线程池中执行
-
onProgressUpdate():当doInBackground中调用publishProgress时回调,在主线程中执行
-
onPostExecute():在异步任务执行之后回调,在主线程中执行
-
onCancelled():在异步任务被取消时回调
3、AsyncTask工作原理
- Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析
- http://blog.csdn.net/qq_30379689/article/details/53203556
4、AsyncTask引起的内存泄漏
-
原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放
-
解决:
-
AsyncTask内部持有外部Activity的弱引用
-
AsyncTask改为静态内部类
-
AsyncTask.cancel()
5、AsyncTask生命周期
在Activity销毁之前,取消AsyncTask的运行,以此来保证程序的稳定
6、AsyncTask结果丢失
由于屏幕旋转、Activity在内存紧张时被回收等情况下,Activity会被重新创建,此时,旧的AsyncTask持有旧的Activity引用,这个时候会导致AsyncTask的onPostExecute()对UI更新无效
7、AsyncTask并行or串行
- AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务
- 如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()
##三、HandlerThread面试题
1、HandlerThread产生背景
当系统有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Google提供了HandlerThread,HandlerThread是在线程中创建一个Looper循环器,让Looper轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞
2、HanlderThread的特点
- HandlerThread本质上是一个线程,继承自Thread
- HandlerThread有自己的Looper对象,可以进行Looper循环,可以创建Handler
- HandlerThread可以在Handler的handlerMessage中执行异步方法
- HandlerThread优点是异步不会堵塞,减少对性能的消耗
- HandlerThread缺点是不能同时继续进行多任务处理,需要等待进行处理,处理效率较低
- HandlerThread与线程池不同,HandlerThread是一个串行队列,背后只有一个线程。
##四、IntentService面试题
** 1、IntentService是什么**
IntentService是继承自Service并处理异步请求的一个类,其内部采用HandlerThread和Handler实现的,在IntentService内有一个工作线程来处理耗时操作,其优先级比普通Service高。当任务完成后,IntentService会自动停止,而不需要手动调用stopSelf()。另外,可以多次启动IntentService,每个耗时操作都会以工作队列的方式在IntentService中onHandlerIntent()回调方法中执行,并且每次只会执行一个工作线程
2、IntentService使用方法
- 创建Service继承自IntentService
- 覆写构造方法和onHandlerIntent()方法
- 在onHandlerIntent()中执行耗时操作
##五、视图工作机制面试题
-
Android进阶——Android视图工作机制之measure、layout、draw
-
Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
##六、ListView面试题
** 1、ListView是什么**
ListView是能将一个数据集合以动态滚动的方式展示到用户界面上的View
2、ListView的RecycleBin机制
最后
由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
.csdn.net/m0_60958482/android_p7)**
[外链图片转存中…(img-ThiOTohQ-1630837195713)]
[外链图片转存中…(img-6269yEKj-1630837195715)]