史上最全的Android面试题集锦

史上最全的2022年最新版Android安卓面试题集锦(含答案+源码) 金三银四,又到了一年一度的黄金跳槽季,想必也许有不少Android程序员开始摩拳擦掌,蠢蠢欲动了。而网络上的面试题大部分已经过时甚至是错误成堆,漏洞百出,今天结合自己这段时间的面试经验和几个Android技术群里面大厂大牛的交流总结出了这篇2022年最新的Android面试题合集。 阅读详情

前言

在这里插入图片描述

由于之前从上海离职,来到深圳找工作。

然后准备面试的时候,发现网上很多Android面试题及答案整理都没有答案,

在成功的拿到几家公司的offer后(虽然不是阿里、网易这种级别的公司,但对我一个毕业三年的 Android 开发来说,算是成功的从小公司跳到大公司)

自己总结了一些最近面试过的 Android面试题以及答案。

Android基本知识点

1、常规知识点

1、 Android类加载器

在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,在早期的Android应用开发中,如果不对Android应用进行分dex处理,那么最后一个应用的apk只会有一个dex文件。

Android中常用的类加载器有两种,DexClassLoader和PathClassLoader,它们都继承于BaseDexClassLoader。区别在于调用父类构造器时,DexClassLoader多传了一个optimizedDirectory参数,这个目录必须是内部存储路径,用来缓存系统创建的Dex文件。而PathClassLoader该参数为null,只能加载内部存储目录的Dex文件。所以我们可以用DexClassLoader去加载外部的apk文件,这也是很多插件化技术的基础。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wplRTpg-1681543295494)(https://segmentfault.com/img/remote/1460000041136600 “image”)]

2、 Service

理解Android的Service,可以从以下几个方面来理解:

  • Service是在main Thread中执行,Service中不能执行耗时操作(网络请求,拷贝数据库,大文件)。
  • 可以在xml中设置Service所在的进程,让Service在另外的进程中执行。
  • Service执行的操作最多是20s,BroadcastReceiver是10s,Activity是5s。
  • Activity通过bindService(Intent,ServiceConnection,flag)与Service绑定。
  • Activity可以通过startService和bindService启动Service。
IntentService

IntentService是一个抽象类,继承自Service,内部存在一个ServiceHandler(Handler)和HandlerThread(Thread)。IntentService是处理异步请求的一个类,在IntentService中有一个工作线程(HandlerThread)来处理耗时操作,启动IntentService的方式和普通的一样,不过当执行完任务之后,IntentService会自动停止。另外可以多次启动IntentService,每一个耗时操作都会以工作队列的形式在IntentService的onHandleIntent回调中执行,并且每次执行一个工作线程。IntentService的本质是:封装了一个HandlerThread和Handler的异步框架。

2.1、生命周期示意图

Service 作为 Android四大组件之一,应用非常广泛。和Activity一样,Service 也有一系列的生命周期回调函数,具体如下图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LeKWE03Q-1681543295495)(https://segmentfault.com/img/remote/1460000041136601 “image”)]

通常,启动Service有两种方式,startService和bindService方式。

2.2、startService生命周期

当我们通过调用了Context的startService方法后,我们便启动了Service,通过startService方法启动的Service会一直无限期地运行下去,只有在外部调用Context的stopService或Service内部调用Service的stopSelf方法时,该Service才会停止运行并销毁。

onCreate

onCreate: 执行startService方法时,如果Service没有运行的时候会创建该Service并执行Service的onCreate回调方法;如果Service已经处于运行中,那么执行startService方法不会执行Service的onCreate方法。也就是说如果多次执行了Context的startService方法启动Service,Service方法的onCreate方法只会在第一次创建Service的时候调用一次,以后均不会再次调用。我们可以在onCreate方法中完成一些Service初始化相关的操作。

onStartCommand

onStartCommand: 在执行了startService方法之后,有可能会调用Service的onCreate方法,在这之后一定会执行Service的onStartCommand回调方法。也就是说,如果多次执行了Context的startService方法,那么Service的onStartCommand方法也会相应的多次调用。onStartCommand方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。

public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) {
}

当Android面临内存匮乏的时候,可能会销毁掉你当前运行的Service,然后待内存充足的时候可以重新创建Service,Service被Android系统强制销毁并再次重建的行为依赖于Service中onStartCommand方法的返回值。我们常用的返回值有三种值,START_NOT_STICKY、START_STICKY和START_REDELIVER_INTENT,这三个值都是Service中的静态常量。

START_NOT_STICKY

如果返回START\_NOT\_STICKY,表示当Service运行的进程被Android系统强制杀掉之后,不会重新创建该Service,当然如果在其被杀掉之后一段时间又调用了startService,那么该Service又将被实例化。那什么情境下返回该值比较恰当呢?如果我们某个Service执行的工作被中断几次无关紧要或者对Android内存紧张的情况下需要被杀掉且不会立即重新创建这种行为也可接受,那么我们便可将 onStartCommand的返回值设置为START\_NOT\_STICKY。举个例子,某个Service需要定时从服务器获取最新数据:通过一个定时器每隔指定的N分钟让定时器启动Service去获取服务端的最新数据。当执行到Service的onStartCommand时,在该方法内再规划一个N分钟后的定时器用于再次启动该Service并开辟一个新的线程去执行网络操作。假设Service在从服务器获取最新数据的过程中被Android系统强制杀掉,Service不会再重新创建,这也没关系,因为再过N分钟定时器就会再次启动该Service并重新获取数据。

START_STICKY

如果返回START\_STICKY,表示Service运行的进程被Android系统强制杀掉之后,Android系统会将该Service依然设置为started状态(即运行状态),但是不再保存onStartCommand方法传入的intent对象,然后Android系统会尝试再次重新创建该Service,并执行onStartCommand回调方法,但是onStartCommand回调方法的Intent参数为null,也就是onStartCommand方法虽然会执行但是获取不到intent信息。如果你的Service可以在任意时刻运行或结束都没什么问题,而且不需要intent信息,那么就可以在onStartCommand方法中返回START\_STICKY,比如一个用来播放背景音乐功能的Service就适合返回该值。

START_REDELIVER_INTENT

如果返回START\_REDELIVER\_INTENT,表示Service运行的进程被Android系统强制杀掉之后,与返回START\_STICKY的情况类似,Android系统会将再次重新创建该Service,并执行onStartCommand回调方法,但是不同的是,Android系统会再次将Service在被杀掉之前最后一次传入onStartCommand方法中的Intent再次保留下来并再次传入到重新创建后的Service的onStartCommand方法中,这样我们就能读取到intent参数。只要返回START\_REDELIVER\_INTENT,那么onStartCommand重的intent一定不是null。如果我们的Service需要依赖具体的Intent才能运行(需要从Intent中读取相关数据信息等),并且在强制销毁后有必要重新创建运行,那么这样的Service就适合返回START\_REDELIVER\_INTENT。

onBind

Service中的onBind方法是抽象方法,所以Service类本身就是抽象类,也就是onBind方法是必须重写的,即使我们用不到。在通过startService使用Service时,我们在重写onBind方法时,只需要将其返回null即可。onBind方法主要是用于给bindService方法调用Service时才会使用到。

onDestroy

onDestroy: 通过startService方法启动的Service会无限期运行,只有当调用了Context的stopService或在Service内部调用stopSelf方法时,Service才会停止运行并销毁,在销毁的时候会执行Service回调函数。

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要《Android面试大厂必考174题》完整文档的可以加微信 即可免费领取!

《Android面试大厂必考174题》

纲要

1. SD卡
2. android的数据存储方式
3. BroadcastReceiver
4. sp频繁操作会有什么后果?sp能存多少数据?
5. dvm与jvm的区别
6. ART
7. Activity的生命周期

img

8. Application能不能启动Activity
9. Activity的状态都有哪些
10. 横竖屏切换时Activity的生命周期****Activity的状态都有哪些
11. 如何设置activity成窗口样式
12. Activity的启动方式

img

13. Service的生命周期
14. IntentService
15. Fragment和Activity的onCreateOptionsMenu
16. Service的onStartCommand有几种返回值
17. Service的onRebind什么情况下执行
18. Handler防止内存泄露
19. IntentFilter的匹配法则
20. Fragment与Activity传值
21. Fragment 生命周期

img

22. Fragment的add和replace的区别 //replace==remove|append
23. Fragment如何实现Activity栈的压栈和出栈
24. 什么情况下造成内存泄露
25. 图片过大导致OOM
26. SoftReference跟WeakRefrence的区别
27. dp与px
28. 设置布局为一半宽、高
29. 多分辨率支持的清单文件配置
30. Android的事件分发机制

img

31. ArrayList和LinkedList的区别
32. LruCache
33. 什么是ANR,如何规避
34. 描述Service的启动方式
35. Android有哪几种布局

img

总结2023Android开发面试题(含答案) 作者本人平时也收集了一些Android核心笔记知识点,面试题资源完整版,及自动化资源详细解析,有需要【点击这里作为一位过来人也是希望你们少走一些弯路。这些资料,对于做Android开发的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….祝大家都能拿到心动的offer~~点击这里。 阅读详情

相关推荐

Android面试题解(全)

Android (一)RecyclerView 与 ListView 的主要区别: 使用 布局效果 局部刷新 嵌套滚动机制 布局效果对比 常用功能和API对比 RecyclerView 和 ListView 在 Android L 引入嵌套滚动机制之后的对比 (1)简单使用 ListView: 继承重写BaseAdapter类 自定义 ViewHolder 和 convertView 一起完成复用优化工作(在自定义的ADP、adapter中完成) RecyclerView: 继承重写Rec

qq_45424937的博客 1429

Android面试题(持续更新中)

Android面试题

Bearin的博客 1万+

史上最全的Android热点技术面试题集锦

前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我整理的Android面试题汇总,由于篇幅原因,在这只把热点技术部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多...

weixin_45258969的博客 8073

常见Android面试题及答案(详细整理)

对于Android的学习,很多⼈可能学了之后,不知道⾃⼰处于哪个阶段,也不到究竟要学到哪个程度,验证⾃⼰学得如何最好的⾯试,就是尝试去⾯试,⽽⾯试⽆⾮就是问你⼀些⾯试题。所以呢,小编整理了这些 Android ⾯试题,从 Java 基础,并发,虚拟机到Android Framework,开源框架,性能优化,并且附带了详细的答案,⽆论是想⾯试还是想看看⾃⼰学得如何,那么这份⾯试题,都值得你去学习。答: 如下图所示。

Android 开发架构 1万+

史上最全的Android屏幕适配面试题集锦

前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我整理的Android面试题汇总,由于篇幅原因,在这只把屏幕适配部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多...

weixin_45258969的博客 8595

史上最全的Android数据结构与算法面试题集锦

前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把数据结构与算法的题目列举出来,这是同系列的最后一小节了,后续我会把所有面试题内容整合到一起来发一篇《史上最全的Android面试题集...

weixin_45258969的博客 4731

安卓开发实战讲解!史上最全的Android面试题集锦,深度好文

" 对于程序员来说,如果哪一天开始他停止了学习,那么他的职业生涯便开始宣告消亡。” 高薪的IT行业是众多年轻人的职业梦想,然而,一旦身入其中却发觉没有想像中那么美好。被称为IT蓝领的编程员,工作强度大,像个编码“机器”;技术更新换代快,饭碗不稳定。随着年龄的增长,尤其是工作2-5年的Android程序员该何去何从?就得看自己的眼光、胆识和机遇了! 阿里 阿里的实习生招聘我参加了内推批次和正式批次一共两场。 阿里的内推批次和正式批次的时间是完全错开的,即在内推全部结束后才开始正式批次。需要注意的是,阿里主.

clhcowboy的博客 352

BAPI_REPMANCONF1_CREATE_MTS实战:从MFBF事务码到精准零件反冲的代码级解析

本文深入解析了如何通过BAPI_REPMANCONF1_CREATE_MTS函数实现SAP生产模块中的零件反冲自动化。文章对比了MFBF事务码的手动操作与BAPI编程的优劣,详细拆解了函数的核心参数、数据结构、调用流程及事务控制,并提供了从数据准备到凭证获取的完整代码示例与避坑指南,帮助开发者实现高效、精准的批量投料过账。

weixin_29240343的博客 192

爆赞!史上最全的Android面试题集锦在这里,写给正在求职的安卓开发

前言: Android 应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的形势来看,Android开发相当火热,但是高级Android开发人才却比较少,现在移动互联网的开发者也逐步开始关注插件化技术、性能优化、行业新技术,系统架构等进阶技术。这也同时造成了一种现像,安卓开发人员感受到行业现在已经是冰火两重天的环境了,技术不全面,还停留在中低端技术水平的,辛辛苦苦写代码,为了一年涨2千块钱的工资,疯狂加班,还要被降薪,还要时刻担心被裁员,而中高级开发人员却是企业青睐的对象,工资越来越高,同时也出现

145

从加权最小二乘(WLS)到IAA:手把手推导DOA估计中的迭代自适应核心公式

本文深入解析了从加权最小二乘(WLS)到迭代自适应算法(IAA)在DOA估计中的数学推导与应用。通过动态调整加权矩阵,IAA在低快拍数、相干源等复杂场景中展现出卓越性能,显著提升角度分辨率和检测概率。文章详细介绍了算法核心步骤、工程优化策略及前沿发展,为雷达探测和无线通信领域提供重要参考。

weixin_30847865的博客 291

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3048

史上最全的Android面试题集锦在这里,成功收获美团,小米安卓offer

目录 前言 Kotlin协程,现在已经成为了面试甚至是工作中一个非常火的东西。 本人在刚开始了解Kotlin协程的时候,断断续续看了网上不少文章,用长篇大论把Kotlin协程描述的非常玄乎,但是看完后还是依然云里雾里,所以决定来写一篇关于协程的文章,希望能够帮助大家能够更快的上手Kotlin协程 第一章:设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章:程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与

173

Android 12高通thermal-engine调试实战:如何快速开启debug日志并解决CPU降频问题

本文详细介绍了Android 12高通thermal-engine的调试实战,包括如何快速开启debug日志、解读关键日志信息以及解决CPU降频问题。通过优化配置文件和调整温控策略,开发者可以有效提升设备性能,避免因温度管理导致的性能瓶颈。

i3j4k5的博客 307

史上最全的Android性能优化面试题集锦

前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把性能优化部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我...

weixin_45258969的博客 1万+

【UG/NX二次开发】记录在二次开发中遇到的坑

【UG/NX二次开发】记录在二次开发中遇到的坑

Trust_MJ的博客 2708

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2420

优快云日报190718:史上最全的Android面试题集锦

优快云日报来啦!给大家奉上当日最新鲜的技术干货! 程序人生|如何走出人生低谷 作者:杏子_1024 最近常有人咨询我关于学业、职场、情场等不如意时该如何解惑与抉择。我还是一如往常,一个个为他们解答。记得刚开始写博客的目的只是为了记笔记,后来也是为了一步步提升自己的技术能力和写作能力。而现在很多时候,写作是为了给他人带来帮助或者提供一些建议。 点击阅读全文 Android|史上最全的Andro...

优快云 官方博客 6570

在MDK5.37版本中添加Complier Version 5( 解决Missing Compiler Version 5 )

本文章仅作为个人学习记录,方法也是从其他博主的博客中得到的,链接如下:二、Keil——Missing Compiler Version 5 和 core_cm3.c 问题解决 - YI颗白菜 - 博客园 (cnblogs.com) 问题描述 更新最新的keil版本(MDK5.37)后,在编译以前版本的工程文件时,发现出现了非常多的报错,在网上搜索之后发现原来时编译器版本不匹配的问题,即MDK5.37中使用的是Version 6版本的编译器,而缺少Version 5,对于以前编写的工

leveling99的博客 1万+

史上最全的Android面试题集锦,Android岗

前言 从去年底到前几天,不断被各路跳槽的朋友刺激着,他们都跟我说着同一件事:跳槽了,薪资翻倍了,去一家叫做字节跳动的公司了。 让我更加讶异的是一个在微博做移动开发的朋友跟我说他舍弃了年终奖,在春节之前就投入到这家公司的怀抱,这让我一度以为这个朋友是被传销了。 说实话,我内心早就被这些个朋友成功跳槽的消息撩拨的春心荡漾了,在这春色融融的夜晚我的代码也开始字节跳动了,今晚就跟大家分享下这些朋友们跳槽的故事。 背景介绍 Android 项目一般使用 gradle 作为构建打包工具,而其执行速度慢也一直为人所诟病

fanzhang_vip0723的博客 632

PCL 基于法向距离的对应点获取

提出了一种基于法向量欧氏距离的点云配准方法。详细推导了法向量距离计算公式,并给出具体计算流程。在代码实现部分,采用PCL库完成了点云法向量计算和对应关系估计,通过可视化验证了算法有效性。实验结果表明,该方法能够准确获取点云间的对应关系,为后续点云配准奠定了基础。

点云侠的博客 226

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

字节跳动技术整理:史上最全的Android面试题集锦,写给正在求职的安卓开发

什么是Kotlin? Kotlin,如前面所说,它是JetBrains开发的基于JVM的语言。JetBrains因为创造了一个强大的Java开发IDE被大家所熟知。Android Studio,官方的Android IDE,就是基于Intellij,作为一个该平台的插件。 Kotlin是使用Java开发者的思维被创建的,Intellij作为它主要的开发IDE。对于Android开发者,有两个有趣的特点: 对Java开发者来说,Kotlin是非常直觉化的,并且非常容易学习。语言的大部分内容都是与我们知道的非常

Sunbuyi的博客 220

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

史上最全的Android面试题集锦在这里,小白也能看明白

码农A:看见标题我就震惊了。 码农B:我也是。 码农C:我琢磨着,UC震惊部还缺人吗?这小编是个人才啊。 某小编:标题是震惊的,但内容是朴实无华的。 前言 Android四大组件:Activity、Service、BroadcastReceiver、ContentProvider。它们的作用分别是: Activity—>配合View展示界面 Service—>长时间在后台运行不与用户直接交互 BroadcastReceiver—>接收广播 ContentProvider—>提供数据

m0_56662269的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 阿里P7大佬教你破解 Kotlin 协程(5) - 协程取消篇
下一篇: Android这么卷,还有前景嘛?
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值