Android的事件分发流程、Kotlin协程、4大组件、Handler机制、架构设计、性能优化、内存泄漏

发布于:2025-08-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. Android 事件分发流程
事件分发遵循 Activity → Window → ViewGroup → View 的层级链,核心方法包括:

  1. dispatchTouchEvent():负责事件的分发,返回值表示事件是否被消费。
  2. onInterceptTouchEvent()(仅 ViewGroup 有):判断是否拦截事件,默认不拦截。
  3. onTouchEvent():处理点击事件,返回值决定是否消耗事件。

流程

  • 事件从 Activity 开始,通过 dispatchTouchEvent () 传递给 Window(PhoneWindow)。
  • Window 将事件传递给顶级 ViewGroup,ViewGroup 通过 onInterceptTouchEvent () 决定是否拦截。
  • 若不拦截,事件递归传递给子 View,最终由 View 的 onTouchEvent () 处理。
  • 若事件未被消费,会沿原路返回(回溯)。

2. Kotlin 协程

2.1Kotlin 协程的优势是什么?
协程是轻量级的线程管理工具,优势包括:

  • 非阻塞式并发:挂起而非阻塞线程,减少上下文切换开销。
  • 简化异步代码:使用 suspend 函数和结构化并发(如 launchasync)避免回调地狱。
  • 资源管理:通过 Job 和 CoroutineScope 自动回收资源,防止内存泄漏。
  • 线程调度灵活:通过 Dispatchers(如 IOMainDefault)指定执行线程。

2.2解释 suspend 关键字的作用。
suspend 关键字标记一个函数为挂起函数,允许协程在执行该函数时暂停,保存上下文状态,待结果返回后恢复执行。挂起函数只能在协程或其他挂起函数中调用。

3. Android 四大组件

3.1 简述 Activity、Service、BroadcastReceiver 和 ContentProvider 的作用。

  1. Activity:UI 界面的载体,管理生命周期(onCreate → onStart → onResume → onPause → onStop → onDestroy)。
  2. Service:在后台执行任务,不提供 UI。分为启动式(startService)和绑定式(bindService)。
  3. BroadcastReceiver:监听系统或应用发出的广播事件(如网络变化、电量低)。
  4. ContentProvider:跨应用共享数据,通过 URI 访问 SQLite 数据库、文件等。

3.2 Activity 的启动模式有哪些?

  • standard(默认):每次启动创建新实例。
  • singleTop:若 Activity 在栈顶,复用当前实例(调用 onNewIntent)。
  • singleTask:若 Activity 存在于栈中,清空其上的所有 Activity。
  • singleInstance:单独创建一个任务栈,该 Activity 独占此栈。

4. Android 基本系统机制

简述 Handler 机制的原理。
答案
Handler 用于在子线程与主线程间传递消息,核心组件包括:

  • Handler:发送和处理消息。
  • Looper:循环从 MessageQueue 中取出消息。
  • MessageQueue:存储消息的队列。
  • Message:携带数据的消息对象。

流程

  1. 子线程通过 Handler 发送 Message 到 MessageQueue。
  2. Looper 不断轮询 MessageQueue,取出消息。
  3. 将消息分发给对应的 Handler 处理(在主线程中执行)。

5. Android 架构设计

5.1MVVM 架构的优势是什么?

MVVM(Model-View-ViewModel)通过数据绑定和 LiveData 实现视图与逻辑分离,优势包括:

  • 解耦:View 只关注 UI 展示,ViewModel 处理业务逻辑。
  • 可测试性:ViewModel 不依赖 Android 框架,便于单元测试。
  • 响应式编程:LiveData 自动更新 UI,避免手动刷新。
  • 生命周期感知:LiveData 自动处理配置变化(如旋转屏幕)。
5.2Jetpack 组件有哪些?


Jetpack 是官方组件库,常用组件包括:

  • ViewModel:存储与界面相关的数据,处理配置变化。
  • LiveData:可观察的数据持有者,自动感知生命周期。
  • Room:SQLite 数据库的抽象层,提供类型安全的 DAO。
  • Data Binding:将布局文件与数据绑定。
  • WorkManager:管理后台任务,兼容不同 Android 版本。

6.如何优化 Android 应用的性能?

  • 布局优化:减少嵌套层级,使用 ConstraintLayout 替代 RelativeLayout。
  • 内存管理:避免内存泄漏(如静态 Activity 引用),使用 ViewModel 管理数据。
  • 异步处理:协程、Handler 或 WorkManager 处理耗时操作。
  • 图片处理:Glide/Picasso 加载图片,避免大图片 OOM。
  • 启动优化:延迟初始化非关键组件,使用 App Startup 框架。

7.简述 Android 的内存泄漏场景

  • 静态变量持有 Activity 引用:导致 Activity 无法被回收。
  • 非静态内部类持有外部类引用:如 AsyncTask、Handler。
  • 资源未关闭:Cursor、文件流、BroadcastReceiver 未注销。
  • 单例持有 Context:建议使用 Application Context。

网站公告

今日签到

点亮在社区的每一天
去签到