Android最全面试大纲(二)

《Android最全面试大纲(二)》

文章目录:

  • Handler面试题
  • AsyncTask面试题
  • HandlerThread面试题
  • IntentService面试题
  • 视图工作机制面试题
  • 事件分发机制面试题
  • ListView面试题
  • Android项目构建面试题

一、Handler面试题

1、Handler是什么

Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue

2、Handler使用方法

  • post(runnable)
  • sendMessage(message)

3、Handler工作原理

  • Android进阶——Android消息机制之Looper、Handler、MessageQueen

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工作原理

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()中执行耗时操作

五、视图工作机制面试题

六、ListView面试题

** 1、ListView是什么**

ListView是能将一个数据集合以动态滚动的方式展示到用户界面上的View

2、ListView的RecycleBin机制

《Android最全面试大纲(二)》

3、ListView的优化

  • 重用convertView
  • 使用ViewHolder
  • 图片三级缓存
  • 监听滑动事件
  • 少用透明View
  • 开启硬件加速

七、Android项目构建面试题

1、android构建流程

《Android最全面试大纲(二)》

2、jenkins持续集成构建

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:请求添加到别人的仓库

  • clone

5、proguard是什么

ProGuard工具是用于压缩、优化和混淆我们的代码,其主作用是移除或混淆代码中无用类、字段、方法和属性

6、proguard技术功能

  • 压缩
  • 优化
  • 混淆
  • 预检测

7、proguard工作原理

将无用的字段或方法存入到EntryPoint中,将非EntryPoint的字段和方法进行替换

8、为什么要混淆

由于Java是一门跨平台的解释性语言,其源代码被编译成class字节码来适应其他平台,而class文件包含了Java源代码信息,很容易被反编译

    原文作者:Android架构木木
    原文地址: https://www.jianshu.com/p/9a0cf94cfbdf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞