Android 一线大厂核心面试题汇总:Activity、Service 与性能优化
本文汇总了 Android 一线大厂面试的核心问题,涵盖 Activity 生命周期、Service 管理、ContentProvider 数据共享、ListView 优化、Fragment 切换、Java 基础、性能调优及 AIDL 通信等关键技术点。文章不仅列出了常见问题,还提供了简洁的技术解答与实现思路,帮助开发者系统复习 Android 开发核心知识,应对技术面试挑战。

本文汇总了 Android 一线大厂面试的核心问题,涵盖 Activity 生命周期、Service 管理、ContentProvider 数据共享、ListView 优化、Fragment 切换、Java 基础、性能调优及 AIDL 通信等关键技术点。文章不仅列出了常见问题,还提供了简洁的技术解答与实现思路,帮助开发者系统复习 Android 开发核心知识,应对技术面试挑战。

本文整理了 Android 开发中常见的一线互联网大厂面试题,涵盖 Activity、Service、ContentProvider、性能优化等核心模块,并附带关键知识点解析,供开发者复习参考。
Activity 是 Android 应用中负责展示用户界面并与用户交互的组件。它是四大组件之一,每个 Activity 通常对应一个窗口。
主要方法包括:onCreate()(创建)、onStart()(可见)、onResume()(运行)、onPause()(暂停)、onStop()(停止)、onDestroy()(销毁)。
Resumed(运行中)、Paused(暂停)、Stopped(停止)、Destroyed(销毁)。
还可以使用 Application 对象、静态变量(慎用)、单例模式、SharedPreferences、数据库或 ViewModel 共享。
Context 是上下文基类。Activity 继承 ContextThemeWrapper,有 UI 功能。Application 继承 ContextWrapper,代表整个应用进程,生命周期最长。
Context 提供访问应用资源、启动组件、获取系统服务等信息的基础接口。
通过 onSaveInstanceState() 保存临时状态,在 onRestoreInstanceState() 恢复;或使用 ViewModel 保存配置变更时的数据。
默认情况下会销毁重建,执行 onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume。可通过设置 configChanges 避免重建。
旧 Activity 的 onPause() 和新 Activity 的 onCreate() 及 onStart()、onResume()。
在 Manifest 中设置 android:theme 属性,如 @style/Theme.AppCompat.NoActionBar。
SingleTop:栈顶复用;SingleTask:整栈复用,若存在则清除其上方所有 Activity 并 bringToFront。
Singletask 会清除栈内其他页面,可能导致用户丢失浏览进度;Singletop 仅复用当前栈顶,体验更连贯。
调用 finish()。安全退出应用可维护一个 Activity 栈,遍历调用 finish() 并清空栈。
Activity 持有 Window,Window 持有 DecorView,DecorView 包含 View 树。View 是具体的 UI 控件。
动态注册(代码中 registerReceiver)和静态注册(Manifest 中声明)。
实现组件间解耦通信,允许不同应用或组件间传递消息。
动态注册灵活但需手动注销;静态注册无需注销但受限于系统限制,无法接收部分特定广播。
标准广播(同步)、有序广播(异步/顺序)、本地广播(应用内)。
不能,否则会导致 ANR。应开启子线程处理。
用于监听系统或应用发出的事件,响应特定意图。
仅在收到广播时实例化,执行完 onReceive 即销毁。注意不要泄露 Context。
使用 bindService() 绑定,通过 ServiceConnection 回调获取 IBinder。启动用 startService()。
onCreate(), onStartCommand(), onBind(), onUnbind(), onDestroy()。
Activity 通过 Intent 启动或绑定 Service,Intent 作为载体传递参数。
默认在主线程,不能直接执行耗时操作,需开线程。
默认都在主线程,除非 Service 内部显式创建新线程。
可以,但需注意 Context 类型,建议使用 ApplicationContext 或传入的 Context。
不建议直接在主线程执行,应开启子线程处理网络请求。
Service 用于后台长时间运行。启动方式:startService(独立运行)和 bindService(绑定交互)。停用以 stopSelf() 或 unbindService()。
IntentService 继承 Service,自动处理消息队列,处理完后自动停止。适合一次性任务。
SQLite 数据库、SharedPreferences、文件存储、ContentProvider。
使用 ContentResolver 的 applyBatch() 方法。
Provider 管理数据,Resolver 操作 Provider,Observer 监听数据变化。
通过 URI 统一接口,跨进程访问数据。
用于安全共享数据。SQL 是直接操作数据库,Provider 封装了 SQL 并提供权限控制。
Intent 是消息对象,IntentFilter 用于匹配 Intent 的 Action、Category、Data。
基本类型、String、Parcelable、Serializable、Bundle 等。
Serializable 基于反射,性能低;Parcelable 手写序列化,性能高,Android 推荐。
显式指定目标组件;隐式指定 Action/Category,由系统匹配。
调用 adapter.notifyDataSetChanged()。
监听滚动到底部事件,加载更多数据并刷新 Adapter。
修改数据源后通知特定位置刷新,或重新绑定该 ViewHolder。
使用第三方库如 SwipeRefreshLayout 或自定义 Header/Footer。
使用 Glide/Picasso 加载,按需加载,压缩尺寸。
Item 布局中 focusable 或 clickable 冲突,设置 descendantFocusability="blocksDescendants"。
使用 ViewHolder 模式,复用 convertView。
可以,通过 getViewTypeCount() 和 getItemViewType() 区分。
调用 setSelection(position)。
不推荐,建议改用 RecyclerView。若必须,需计算高度并禁用 MeasureSpec。
ViewHolder 复用导致数据错乱,确保在 bind 时正确赋值。
知道,当列表为空时显示空视图。
使用 replace() 配合 addToBackStack() 或 show()/hide()。
模块化 UI,复用性强,适配平板。
使用 FragmentTransaction 的 addToBackStack()。
Replace 替换容器内容;Add 添加但不移除原有 Fragment。
通过 setArguments() 或接口回调。
onAttach, onCreate, onCreateView, onActivityCreated, onStart, onResume, onPause, onStop, onDestroyView, onDestroy, onDetach。
ViewPager 会缓存 Fragment,onDestroyView 可能不会立即执行,直到被移除。
重载(Overload)同方法名不同参数;重写(Override)子类覆盖父类方法。
String 不可变;StringBuffer 可变且线程安全;StringBuilder 可变非线程安全。
单例、工厂、代理、观察者、适配器、策略等。
四层:应用层、传输层、网络层、链路层。HTTP/XMPP 应用层,TCP 传输层,IP 网络层。
继承扩展类功能;实现接口定义规范。
final 修饰符;finally 异常捕获块;finalize GC 回收前调用。
int 基本类型;Integer 包装类,可为 null。
==比较引用或值;equals 比较内容;hashCode 哈希码。
使用 Systrace、Profiler、LeakCanary 等工具。
静态集合持有 Context、未注销的 Listener、单例不当使用。
大对象未释放、循环引用、Bitmap 过大。
避免 static 持有 Context,使用 WeakReference。
线程池管理,避免频繁创建销毁线程。
Bitmap 解码失败、List 无限增长、数据库游标未关闭。
压缩图片,使用 inSampleSize,使用 LruCache。
实现 Thread.UncaughtExceptionHandler。
Application Not Responding。避免主线程耗时操作,优化 IO 和网络。
线程用 Handler/Atomic;多进程用 Binder/Messenger/Socket。
Dalvik/ART 是虚拟机进程;Linux 是内核进程;线程是 CPU 调度单元。
Handler、MessageQueue、Locks、Atomic。
及时释放资源,使用弱引用,监控内存曲线。
.aidl 文件。TimeInterpolator 重写 getInterpolation。windowAnimationStyle。onTouch 返回 true 可拦截;onTouchEvent 最终处理。前者优先级高。RxJava、Glide、Retrofit、OkHttp、Dagger、ButterKnife 等。
内存缓存(LruCache)、磁盘缓存(DiskLruCache)、网络请求。
删除缓存目录文件或调用 clearDiskCache()。
唤醒应用、提升活跃度、实时通知。
轻量级、易解析、跨语言兼容性好。
需求分析 -> 设计 -> 开发 -> 测试 -> 上线 -> 运维。
Measure、Layout、Draw、OnTouchListener。
继承 View -> 重写 onMeasure/onDraw -> 处理触摸事件。
定义 API 接口,配置 OkHttp,发起请求。
解耦、并行开发、复用、降低耦合度。
动态下发功能、热修复、减少包体积。
编译源码 -> 生成 dex -> 合并资源 -> 签名 -> apk。
下载 -> 校验签名 -> 解压 -> 安装 dex -> 注册组件。
混淆(ProGuard/R8)、加固、加壳、代码加密。
V1 基于 JarSigner;V2 基于 APK Signature Scheme v2,安全性更高。
对称:AES/DES,密钥相同;非对称:RSA/ECC,公钥加密私钥解密。
前台服务、JobScheduler、系统白名单、双进程守护。
高效 IPC、权限控制、C/S 架构。
URI 统一资源标识符;URL 统一资源定位符,是 URI 的子集。
客户端发送 Hello -> 服务端回应证书 -> 协商密钥 -> 建立加密通道。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online