Android面试问题收集(直接背熟去回答)

推荐相关面试文章

盘点2021年Android——面试必备基础技能 - 个人文章 - SegmentFault 思否

1.View绘制流程

View的整个绘制流程可以分为以下三个阶段:measure测量->layout布局->draw绘制

  • onMeasure()确定View的测量宽高
  • onLayout()确定View的最终宽高四个顶点的位置
  • onDraw()将View 绘制到屏幕

Android面试:Invalidate、RequestLayout_requestlayout和invalidate_沙漠一只雕得儿得儿的博客-CSDN博客

Android自定义View中invalidate重绘和requestLayout更新 - 行业资讯 - 电子产品设计开发与电子技术学习交流!

2.事件分发机制

事件传递的顺序:Activity->Window->DecorView->ViewGroup->View

事件分发机制主要由事件分发(dispatchTouchEvent->事件拦截(onInterceptTouchEvent->事件处理(onTouchEvent三步来进行逻辑控制。

3.滑动冲突如何解决

举例:ViewPager2嵌套垂直滑动的Fragment,Fragment布局中有一个RecyclerView消息列表。RececlerView上下滑动会与ViewPager2产生冲突,解决办法:自定义一个继承RecyclerView的类,在dispatchTouchEvent方法中调用getParent().requestDisallowInterceptTouchEvent(true)   (true父控件不会拦截事件)

4.性能优化(内存泄漏,内存溢出OOM,ANR)

1.内存泄漏(概念:内存泄漏即该被释放的内存没有被及时的释放,一直被某个或某些实例所持有却不再使用导致GC不能回收。)     (会问内存泄漏有哪些例子)

A.、Handler内存泄漏的原因是什么?如何解决?

在Activity或Fragment销毁时,Handler中可能还有未处理的Message或Runnable,持有Handler的引用,导致Handler无法被回收,从而引发内存泄漏。

解决办法:

  • 在Activity或Fragment的onDestroy()方法中,调用Handler的removeCallbacksAndMessages()方法(移除所有的Message和Runnable)。
  • 使用弱引用或WeakReference代替强引用来引用Handler。

B、单例导致内存泄漏的原因是什么?如何解决?

列如:单例实例持有Activity的Context,此时单例就有持有该 Activity 的强引用(直到整个应用生命周期结束)。即使该 Activity 退出,该 Activity 的内存也不会被回收,这样就造成了内存泄露。

解决办法:

将 Context改成context.getApplicationContext() ,此时单例引用的对象是 Application,而 Application 的生命周期本来就跟应用程序是一样的,也就不存在内存泄露。

C、内部类导致内存泄漏    Android常见内存泄漏_android常见的内存泄漏_打架不行的二哈的博客-CSDN博客

非静态内部类会默认持有外部类的引用。会导致内部类的生命周期过长。
正确的做法就是修改成静态内部类。

D、线程造成的内存泄漏

Android造成OOM 和ANR的原因及解决办法 - 简书

如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收,造成内存泄漏。

2.内存溢出OOM    当对象的内存占用已经超出分配内存的空间大小

大致分为两类:

     ⑴,加载对象过大;

举例:

1.加载加载Bitmap之前先计算出合适的缩放比例

     ⑵,相应资源过多,没有来不及释放。

3.ANR(应用程序无响应)  只有主线程才会产生ANR,主线程就是UI线程

举例:

1.5秒内无法响应屏幕触摸事件或键盘输入事件。

2.前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。

3.前台服务20秒内,后台服务在200秒内没有执行完毕。

如何避免ANR的发生:

1.避免在主线程执行耗时操作,耗时操作应新开一个子线程完成,然后在主线程更新UI。

2.BroadcastReceiver要执行耗时操作时应启动一个service,将耗时操作交给service来完成。

5.Handler相关知识

Handler是用于实现线程间通信和任务调度的一种机(Handler、 Looper、MessageQueue、 Message

先创建一个与一个线程相关联Handler实例(Handler与创建它的线程相关联,而且也只与创建它的线程相关联),在Handler的构造函数中获取该线程的Looper对象,然后将Handler与Looper绑定。Handler通过post()、sendMessage()等方法将一个Message对象插入到Looper的MessageQueue中,Looper会不断地从MessageQueue中取出Message并将其传递给Handler的dispatchMessage()方法,dispatchMessage()方法负责处理取出的Message,根据Message的类型执行相应的操作,如回调、更新UI等。

6.Service相关知识。

Service根据使用方式有两种:startService、bindService

startService&bindService使用场景的学习理解_weixin_34101229的博客-CSDN博客

Android四大组件——Service详解_android service使用场景_c小旭的博客-CSDN博客

Android中Service的简单使用_android service使用_贪睡的汤圆的博客-CSDN博客

【Android开发基础】四大组件之一Service(服务)的应用场景及使用(以实时聊天为例)_android service使用场景_云端new守夜人的博客-CSDN博客

7.多线程相关知识。

可能会问(多个线程访问同一个变量)如何解决

1.synchronized加锁后用到的变量才会从主内存拉取、才会修改后刷新回主内存。

2.volatile

Java多线程变量共享与隔离_骑个小蜗牛的博客-CSDN博客

Android面试---多线程_android多线程面试题_Liknananana的博客-CSDN博客

还会问(是否使用过线程池

Java并发编程面试题——线程池_代码星辰的博客-CSDN博客

Android线程池的经典使用_51CTO博客_android 线程池

Android 线程池_安卓线程池_李青涛的博客-CSDN博客

8.Android动画类型分类

逐帧动画【Frame Animation】,即顺序播放事先准备的图片。

补间动画【Tween Animation】,即平移、缩放、旋转、透明度。

属性动画【Property Animation】,补间动画增强版,支持对对象执行动画。

过渡动画【Transition Animation】,实现Activity或View过渡动画效果。包括5.0之后的MD过渡动画等。

9.Http协议、TCP/UDP

Http是应用层协议,在TCP/IP协议接收到数据之后通过HTTP协议来解析才可以使用。

传输层:实际传输数据。(TCP、UDP协议)

Http的请求过程
1、域名解析
2、发起TCP的3次握手
3、建立TCP连接后发起Http请求
4、服务器端响应Http请求,并回传数据
5、客户端获取数据并解析展示在前端界面

TCP和UDP的区别

  • TCP:面向连接,可靠的,速度慢、效率低,适用于需要传输可靠的数据时使用。
  • UDP:无连接,不可靠,速度快、效率高,适用于高效传输忽略可靠性时使用。

10.MVC、MVP、MVVM区别

Android之Mvc、Mvp、Mvvm_mvvm presenter_天若子的博客-CSDN博客

Android 架构 MVC MVP MVVM,这一波你应该了然于心

一篇文章讲清楚Android中的MVC、MVP、MVVM架构 (附实现代码)_安卓mvc_bugyinyin的博客-CSDN博客

11.进程间通信

android中进程间通信的几种方式_android进程间通信_追梦人-涛的博客-CSDN博客

进程间通信_Android 进程间通信的几种实现方式

12.WebView与H5交互

Android进阶之路 - 通过WebView与H5前端进行完美交互_webview与h5交互_Modu_MrLiu的博客-CSDN博客

13.Android进程间通信

android中进程间通信的几种方式_android进程间通信_追梦人-涛的博客-CSDN博客

带你深入了解Android进程间通信_android 进程间通信有几种_老王学长的博客-CSDN博客

android中进程间通信的几种方式_android进程间通信_追梦人-涛的博客-CSDN博客

14.RxJava+Retrofit+OkHttp

Rx系列<第三十二篇>:RxJava+Retrofit+OkHttp+MVP - 简书

15.RxJava的原理

Android开发面试之RxJava_51CTO博客_android rxjava面试题

优美的异步 --- RxAndroid - 简书

16.Kotlin

可能会问项目中是否使用协程和协程的相关知识

Android 上的 Kotlin 协程  |  Android Developers

17.在实际的项目中做过哪些性能优化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值