-
Result:表示后台任务的返回结果的参数类型,该参数会作为onPostExecute()方法的参数
-
五个方法
-
onPreExecute():异步任务开启之前回调,在主线程中执行
-
doInBackground():执行异步任务,在线程池中执行
-
onProgressUpdate():当doInBackground中调用publishProgress时回调,在主线程中执行
-
onPostExecute():在异步任务执行之后回调,在主线程中执行
-
onCancelled():在异步任务被取消时回调
3、AsyncTask工作原理
- Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析
- blog.csdn.net/qq_30379689…
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机制
3、ListView的优化
- 重用convertView
- 使用ViewHolder
- 图片三级缓存
- 监听滑动事件
- 少用透明View
- 开启硬件加速 ##七、Android项目构建面试题
1、android构建流程
2、jenkins持续集成构建
- 这里可参考蒲公英文档
- www.pgyer.com/doc/view/je…
3、Git常用命令
- git init:仓库的初始化
- git status:查看当前仓库的状态
- git diff:查看仓库与上次修改的内容
- git add:将文件放进暂存区
- git commit:提交代码
- git clone:克隆代码
- git bransh:查看当前分支
- git checkout:切换当前分支
4、git工作流
-
fork/clone(主流)
-
fork:将别人的仓库代码fork到自己的仓库上
-
clone:克隆下自己仓库的代码
-
update、commit:修改代码并提交到自己的仓库
-
push:提交到自己的仓库
-
pull request:请求添加到别人的仓库
建议
当我们出去找工作,或者准备找工作的时候,我们一定要想,我面试的目标是什么,我自己的技术栈有哪些,近期能掌握的有哪些,我的哪些短板 ,列出来,有计划的去完成,别看前两天掘金一些大佬在驳来驳去 ,他们的观点是他们的,不要因为他们的观点,膨胀了自己,影响自己的学习节奏。基础很大程度决定你自己技术层次的厚度,你再熟练框架也好,也会比你便宜的,性价比高的替代,很现实的问题但也要有危机意识,当我们年级大了,有哪些亮点,与比我们经历更旺盛的年轻小工程师,竞争。
-
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
-
准备想说怎么样写简历,想象算了,我觉得,技术就是你最好的简历
-
我希望每一个努力生活的it工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
-
有什么问题想交流,欢迎给我私信,欢迎评论
【附】相关架构及资料
资料领取
点击这里免费获取
内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术