Android 中高级开发工程师面试核心知识点总结
Android 中高级开发面试重点考察组件机制、内存管理及性能优化能力。内容涵盖 Activity 生命周期与启动模式、Service 绑定与保活、ContentProvider 数据共享、Handler 消息机制及 Java 基础原理。通过解析常见问题与底层逻辑,帮助开发者建立系统化知识框架,应对大厂技术考核。

Android 中高级开发面试重点考察组件机制、内存管理及性能优化能力。内容涵盖 Activity 生命周期与启动模式、Service 绑定与保活、ContentProvider 数据共享、Handler 消息机制及 Java 基础原理。通过解析常见问题与底层逻辑,帮助开发者建立系统化知识框架,应对大厂技术考核。

Activity 是 Android 应用的基本组件之一,代表一个单一的屏幕界面。它是用户与应用程序交互的入口点,每个 Activity 都对应一个窗口。
Activity 的生命周期包含以下关键方法:
onCreate(): 创建时调用,用于初始化。onStart(): 变为可见时调用。onResume(): 开始与用户交互时调用。onPause(): 失去焦点但不可见时调用,常用于保存数据。onStop(): 完全不可见时调用。onDestroy(): 销毁前调用,释放资源。onRestart(): 从停止状态重新启动时调用。四种模式:standard, singleTop, singleTask, singleInstance。
finish()。Activity 持有 Window 对象,Window 管理 ViewRoot。View 树通过 Window 绘制到屏幕上。三者层层封装,实现 UI 渲染。
BroadcastReceiver 中不能执行耗时操作,否则会导致 ANR。应使用 IntentService 或异步线程处理。
startService(),独立运行,需 stopService() 停止。bindService(),与组件生命周期绑定,可通信。onCreate(), onStartCommand(), onBind(), onUnbind(), onDestroy()。Service 默认在主线程运行,不能执行耗时操作(如网络请求),需开启子线程或使用 Handler/AsyncTask。
继承自 Service,自动处理消息队列,执行完自动停止,适合后台任务。
SQLite、SharedPreferences、文件存储、ContentProvider。
通过 ContentResolver 调用 applyBatch() 进行事务性批量更新。
通过 URI 标识数据源,跨进程访问数据库,实现安全的数据交换。
Intent 描述动作,Filter 定义匹配规则。隐式 Intent 依赖 Filter 匹配组件。
支持基本类型、String、Serializable、Parcelable 及 Bundle 包装的对象。
调用 adapter.notifyDataSetChanged() 刷新视图。
监听滚动到底部事件,触发下一页数据加载并追加至列表。
定位特定位置 Item,获取 ViewHolder 后更新内容,避免整体重绘。
使用 Glide 或 Picasso 库,设置缓存策略,压缩图片尺寸,避免 OOM。
Item 中包含 Button 时,需设置 focusable="false" 或 clickable="false",防止拦截点击事件。
复用 ViewHolder,减少 findViewById 调用;避免复杂布局嵌套。
重写 getItemViewType() 和 getViewTypeCount(),根据类型返回不同布局。
调用 listView.setSelection(position)。
禁止 ScrollView 嵌套 ListView,可使用 CustomScrollView 或 RecyclerView 替代。
通常因图片加载异步导致高度计算错误,需预加载或固定高度。
当数据为空时显示空视图,提升用户体验。
使用 replace() 或 show()/hide() 切换,避免重复实例化。
模块化 UI,适配平板与大屏,复用性强。
通过 FragmentTransaction 的 addToBackStack() 实现压栈出栈效果。
通过 setArguments() 传递 Bundle 参数。
与宿主 Activity 关联,注意 onAttach(), onCreateView(), onResume() 等回调顺序。
ViewPager 会预加载相邻 Fragment,需注意资源释放,避免内存泄漏。
常见包括单例、工厂、观察者、代理、适配器、装饰者等。
应用层 (HTTP), 传输层 (TCP), 网络层 (IP), 链路层。
使用 Systrace, Profiler, LeakCanary 等工具分析 CPU、内存、网络。
静态集合持有 Context、未注销监听器、单例长生命周期引用短对象。
大对象未释放、循环引用、Bitmap 过大、内存碎片。
避免 static 持有 Activity 引用,使用 Application Context。
线程池未关闭,大量线程阻塞,需合理配置线程数。
捕获异常记录日志,尝试释放资源,重启服务。
压缩图片,使用缩略图,及时 recycle。
全局 UncaughtExceptionHandler 捕获未处理异常,上报崩溃信息。
主线程耗时超过 5s,优化 IO 操作,使用异步线程,避免死锁。
Handler, SharedMemory, Socket, Pipe。
及时释放资源,使用弱引用,监控内存曲线。
dp/sp 单位,密度无关,使用 ConstraintLayout,适配不同分辨率。
Android Interface Definition Language,定义跨进程接口。
通过 Binder 机制生成 Stub 和 Proxy,实现远程调用。
支持基本类型、String、List、Map 及自定义 Parcelable 对象。
补间动画 (Tween) 和帧动画 (Frame)。
可组合多个 Tween 动画,如 Alpha + Translate。
AccelerateDecelerate, Linear, Overshoot, Anticipate 等。
继承 Interpolator,重写 getInterpolation 方法。
在 styles.xml 中定义 windowEnterAnimation 和 exitAnimation。
MessageQueue 队列,Looper 循环取消息,Handler 发送和处理。
可以,但需确保 Looper 存在,否则报错。建议主线程创建。
除 Handler 外,可用 runOnUiThread, LiveData, Coroutine。
系统限制,可能导致线程安全问题,必须切回主线程。
常用 Retrofit, OkHttp, Glide, Dagger, RxJava 等。
内存缓存 (LruCache)、磁盘缓存 (DiskLruCache)、网络缓存。
清理 LruCache 内存,删除磁盘文件目录。
保持连接,实时通知,提升用户活跃度。
轻量级,语言无关,易于解析,结构化强。
需求分析->设计->开发->测试->上线->运维。
测量、布局、绘制三步走,重写 onMeasure, onLayout, onDraw。
注解定义接口,动态代理生成实现,支持同步异步。
解耦模块,独立开发测试,提高复用率。
动态下发功能,热修复,降低包体积。
编译源码为 dex,合并资源,签名打包。
下载 APK->校验签名->解压->安装->启动。
混淆代码,加固壳,检测 Root 环境。
v1 基于 JAR 签名,v2 基于整包签名,安全性更高。
对称加密 (AES) 速度快,非对称加密 (RSA) 更安全,常结合使用。
双进程守护,系统广播监听,前台服务,JobScheduler。
高性能 IPC,权限控制,单向/双向通信。
URI 统一资源标识符,URL 统一资源定位符,URL 是 URI 的子集。
协商加密算法,交换密钥,建立安全通道。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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