1.解释一下Android系统架构的各个层次及其职责。
Android系统架构从上至下分为四层:
- 应用程序层:包括各种预装和第三方应用,使用Android SDK开发。
- 应用程序框架层:提供了构建应用程序所需的API集合,如Activity、Service、BroadcastReceiver、Content Provider等组件。
- 系统库和Android运行环境层:包括C/C++库(如Libc、Media Libraries)和Android Runtime(ART/Dalvik虚拟机),支持核心功能和高性能服务。
- Linux内核层:提供了硬件驱动、安全性、电源管理等底层服务。
2. Activity和Fragment有什么区别?
- Activity是Android应用的基本构建块之一,代表了一个具有用户界面的屏幕。而Fragment是Activity内的一个可重用部件,拥有自己的生命周期,可以在多个Activity中重复使用,有助于构建灵活且适应不同屏幕尺寸的用户界面。
3. 解释一下Android中的Intent及其类型。
- Intent是Android应用间进行交互的消息对象,用于启动Activity、Service或发送Broadcast。主要类型有:
•显式Intent:明确指定了目标组件的类名,确保系统直接启动指定组件。
•隐式Intent:只描述了要执行的操作和数据类型,系统根据这些信息找到合适的组件来响应。
4. Service和Thread的区别是什么?
- Service和Thread都可用于后台处理任务,但用途和性质不同。
•Service:运行在主线程,用于执行长时间运行的操作,即使应用切换到后台也能继续运行。它不提供UI,且生命周期与启动它的组件独立。
•Thread:用于执行多线程任务,适合CPU密集型操作。它是进程内的执行单元,但本身没有生命周期管理,也不直接与Android组件生命周期关联。
5. 如何在Android中实现屏幕适配?
- 实现屏幕适配通常涉及以下几个方面:
•使用相对布局(RelativeLayout)、约束布局(ConstraintLayout)等灵活布局。
•尺寸资源文件(dimens.xml)中定义不同密度和屏幕尺寸的尺寸值。
•使用百分比布局或权重(weight)属性。
•图片资源提供多种密度版本(mdpi, hdpi, xhdpi等)。
•采用响应式设计和动态调整视图尺寸。
6. Android中的四大组件是什么?它们各自的生命周期是怎样的?
- 四大组件包括Activity、Service、BroadcastReceiver、ContentProvider。
•Activity:生命周期包括onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()等。
•Service:生命周期包括onCreate(), onStartCommand(), onBind(), onUnbind(), onDestroy()等。
•BroadcastReceiver:主要生命周期方法是onReceive(),在接收到广播时被调用。
•ContentProvider:生命周期方法较少,主要关注onCreate()和数据查询、修改等操作。
7. 什么是Context?它有哪些作用?
- Context是Android中所有应用组件的基础,提供了访问应用环境和系统服务的接口。其作用包括:
•加载资源。
•启动Activity、Service、发送Broadcast。
•获取系统服务,如LocationManager、NotificationManager等。
•访问应用文件系统和偏好设置。
8. Android中的消息机制(Handler, Looper, MessageQueue)是如何工作的?
- 此机制允许在主线程中处理来自其他线程的消息。
•MessageQueue:维护一个消息列表,按顺序处理消息。
•Looper:在每个线程中创建,用于循环遍历MessageQueue,取出并分发消息给Handler处理。
•Handler:发送消息到MessageQueue,并在消息出队时处理消息。通过post(Runnable)或sendMessage(Message)方法实现。
9. 如何在Android中实现数据持久化?
- 数据持久化有多种方式:
•SharedPreferences:存储键值对,适合轻量级数据。
•SQLite数据库:关系型数据库,适合结构化数据存储。
•文件存储:使用File API在内部或外部存储空间保存文件。
•ContentProvider:用于在应用间共享数据。
•Room Persistence Library:Android架构组件之一,提供SQLite数据库的封装,简化数据库操作。
10. Android中的生命周期回调方法在哪些情况下会被调用?
生命周期回调方法在以下几种情况被调用:
•用户操作(如打开、关闭应用)。
•系统事件(如来电、低电量警告)。
•应用内部事件(如启动新Activity、旋转屏幕)。
•系统资源紧张导致的后台进程回收。
11. 如何在AndroidManifest.xml中注册BroadcastReceiver?
- 通过在AndroidManifest.xml文件中添加receiver标签来注册BroadcastReceiver,例如:
- <receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
这样,当系统发出"BOOT_COMPLETED"广播时,MyBroadcastReceiver就会接收到。
12. 解释一下Android的生命周期回调方法onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState)的作用。
- 这两个方法用于处理Activity因配置变更(如屏幕旋转)而销毁和重建的情况。
•onSaveInstanceState(Bundle outState):在Activity被销毁前调用,用于保存当前状态信息到Bundle中,如编辑框的文本、滚动位置等。
•onRestoreInstanceState(Bundle savedInstanceState):在Activity重建后调用,通过传入的Bundle恢复之前保存的状态,保证用户体验的连续性。
13. Android中如何实现横竖屏切换时的界面保持?
- 可以通过以下方式实现:
•在AndroidManifest.xml中对应Activity的标签中设置android:configChanges=“orientation|screenSize”,然后重写Activity的onConfigurationChanged(Configuration newConfig)方法,处理配置变更,避免重新创建Activity。
•使用ViewModel存储UI相关的数据,ViewModel在配置变更时不会被销毁,可以跨配置变更保持数据。
14. 如何理解Android中的ANR(Application Not Responding)?如何避免?
- ANR表示应用无法在规定时间内响应用户的输入。通常发生在主线程阻塞超过5秒时,表现为系统显示ANR对话框。 避免ANR的方法:
•避免在主线程执行耗时操作,如网络请求、大量计算。
•使用异步处理,如AsyncTask、Handler、IntentService等。
•优化数据库查询,使用索引,减少查询复杂度。
•监控应用性能,及时发现并解决瓶颈。
15. Android中的图片加载库Glide和Picasso有什么区别?
- Glide和Picasso都是流行的图片加载库,但各有特点:
•Glide:由Google开发,更注重性能和内存优化,支持动画、视频解码、占位图、错误占位图、自动资源管理和回收。Glide的缓存策略更灵活,支持磁盘和内存缓存。
•Picasso:由Square公司开发,易于集成和使用,提供简单的图片加载、缓存、错误处理功能。虽然也支持GIF加载,但在性能和内存管理方面略逊于Glide。
经验总结
多家面试总结下来,考察的范围都很广,包括基础知识、项目。
基础知识这块,需要花大量时间准备每一个细节,知其所以然,这样才能面试的时候问起来,都能头头是道。
项目,很多公司都比较注重项目,所以不仅要熟悉项目做了什么事情,而且要提炼出项目中的闪光点或者说不一样的地方,这些在面试之前都要想清楚。
然后就是要多刷题。面试了这么多公司,除了阿里,其他公司的每一轮都会要求做题,所以在面试之前要对各种常见面试题了解,有时间的话多去刷刷题找感觉。
为了帮助大家在2024金三银四找到满意的工作,在这里小编分享一份精心整理的《Android中高级面试题》~
涵盖了许多大厂高频的面试题,只要自己肯下功夫,做到熟稔于心,面试自然胸有成竹。
【扫描下方二维码即可免费领取!!】

面试题内容包括:「Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Binder、Handler、AMS、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES」,如下图所示:同时,还给出一些常见问题的思考方式,以帮助读者在面试中更好地表达自己!
第一章 算法和数据结构面试题汇总
第二章 Java核心基础面试题汇总
第三章 Java深入泛型与注解面试题汇总
第四章 Java并发编程面试题汇总
第五章 Java虚拟机原理面试题汇总
第六章 Java反射类加载与动态代理面试题汇总
第七章 网络编程面试题汇总
第九章 高级UI面试题汇总
第十章 Framework内核解析面试题汇总
第十一章 Android组件内核面试题汇总
第十二章 程序性能优化与数据持久化面试题汇总
第十三章 开源框架面试题汇总
完整面试题+答案解析领取方式:扫描下方二维码
