Android架构概述
Android架构可以划分为四大层次:
-
应用层(Application Layer):
- 最高层,包含用户直接交互的应用程序。应用可以是系统应用或第三方应用。
- 常见应用包括手机、短信、浏览器和音乐播放器等。
-
应用框架层(Application Framework Layer):
- 提供了用于构建 Android 应用的 API。
- 包含组件如:
- Activity Manager:管理应用的生命周期和活动。
- Content Providers:管理应用之间的数据共享。
- View System:处理用户界面和用户交互。
- Notification Manager:管理通知。
- Location Manager:处理位置相关的功能。
-
库层(Library Layer):
- 包含 Android 运行时所需的各种 C/C++ 库。
- 主要组件包括:
- Surface Manager:处理绘图和显示。
- Media Library:处理音频和视频播放。
- SQLite:轻量级数据库。
- OpenGL ES:用于图形处理和游戏开发。
- SSL:安全套接字层,处理数据加密和安全。
-
Linux内核层(Linux Kernel Layer):
- Android基于Linux内核,提供了硬件抽象、驱动程序管理、内存管理、进程管理和安全等基本服务。
- 此层是Android的基础,支持所有上层功能。
Android系统架构示意图
+--------------------------+
| Applications |
+--------------------------+
| Application Framework |
+--------------------------+
| Libraries |
+--------------------------+
| Linux Kernel |
+--------------------------+
Android的运行时(ART)
自 Android 5.0(Lollipop)以来,Android 采用了 Android Runtime(ART),替代了原来的 Dalvik 虚拟机。ART 具有以下特点:
- Ahead-of-Time Compilation (AOT):在安装应用时编译字节码为机器代码,提高了应用的性能。
- 增强的垃圾回收:更高效的内存管理和资源释放机制。
- 支持多线程:提高了应用的并发性能。
Android的四大组件
- Activity: 用户界面组件,负责与用户交互的界面。
- Service: 在后台运行的组件,不提供用户界面。
- Broadcast Receiver: 监听并响应广播消息的组件。
- Content Provider: 管理应用间数据共享的组件。
什么是Intent?
Intent 是一种用来在不同组件间进行交互的消息对象。可以用于启动Activity、启动Service、发送广播等。
Activity的生命周期
- onCreate(): 创建Activity,初始化。
- onStart(): Activity即将对用户可见。
- onResume(): Activity对用户可见并已处于前台。
- onPause(): Activity即将进入暂停状态。
- onStop(): Activity不再对用户可见。
- onDestroy(): Activity被销毁。
什么是Fragment?
Fragment 是Activity的一个可重用的部分,具有自己的生命周期和用户界面。可以在Activity中动态添加、移除或替换。
什么是Broadcast Receiver?
Broadcast Receiver 是用于监听应用或系统广播信息的组件。可以在后台接收和响应这些广播。
如何持久化数据?
Android支持多种方式持久化数据:
- SharedPreferences: 存储简单的键值对。
- SQLite Database: 存储结构化数据。
- File Storage: 读写文件。
- Content Provider: 用于数据共享。
什么是Service?
Service 是一种在后台运行的组件,执行长时间运行的操作,而不提供用户界面。可以是前台Service或后台Service。
Service 的类型
a. 开始服务(Started Service)
- 通过
startService(Intent)
启动的服务。服务会在后台运行,直到显式停止。 - 一旦启动,服务可以在不与活动交互的情况下继续运行,即使与用户界面没有任何关联。
- 可以通过
stopSelf()
或stopService(Intent)
停止。
b. 绑定服务(Bound Service)
- 通过
bindService(Intent, ServiceConnection, int)
启动的服务。允许与应用程序的组件(如 Activity)进行交互。 - 一旦与绑定的组件断开连接,服务也会自动停止。
Service 的生命周期
- onCreate(): 服务被创建时调用,通常用于初始化操作。
- onStartCommand(): 服务每次被
startService()
调用时执行,适合进行后台任务。 - onBind(): 服务被绑定时调用,用于返回 Binder 对象。
- onUnbind(): 当所有绑定的客户端都断开连接时调用。
- onDestroy(): 服务被销毁之前调用,适合释放资源。
Android中的AsyncTask?
AsyncTask 是用于简化异步任务处理的类。可以在后台线程中处理任务,并在进行过程中更新UI。
什么是RecyclerView?
RecyclerView 是一种更灵活、更高级的ListView,支持更复杂的布局,适用于较大数据集的展示,并可以实现流畅的滑动效果。
什么是ViewGroup?
ViewGroup 是所有布局的基类,它可以包含多个子视图(View)或其他ViewGroup。常用的有LinearLayout、RelativeLayout、ConstraintLayout等。
Android中如何实现多线程?
- Thread: 创建新线程。
- Handler: 与UI线程进行通信。
- AsyncTask: 处理异步任务。
- ExecutorService: 线程池管理。
什么是依赖注入?
依赖注入 是一种设计模式,通过构造器、工厂方法等方式将对象的依赖关系从内部管理转移到外部来降低耦合度。在Android中常用的依赖注入框架有Dagger和Hilt。
什么是ViewModel?
ViewModel 是Android架构组件的一部分,用于存储和管理与UI相关的数据,能够在配置变化(如屏幕旋转)时保持数据。
什么是LiveData?
LiveData 是一种可观察的数据持有者,能够在数据变化时通知观察者,适用于MVC或MVVM架构。
如何处理屏幕旋转?
可以通过以下方式处理:
- AndroidManifest.xml 中配置
android:configChanges
。 - 使用
onSaveInstanceState()
和onRestoreInstanceState()
保存和恢复状态。 - 使用 ViewModel 来存储 UI 相关数据。
消息机制模型
消息机制主要包含:MessageQueue、Handler、Looper和Message这四大部分。
-
Message
需要传递的消息,可以传递数据
-
MessageQueue
消息队列,但是它的内部实现并不是用的队列,实际上是通过一个单链表的数据结构来维护消息列表,因为单链表在插入和删除上比较有优势。主要功能是向消息池传递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next)
-
Handle
消息辅助类,主要功能是向消息池发送各种消息事件(Handler.sendMessage)和处理相应消息事件(Handler.handleMessage)
-
Looper
不断循环执行(Looper.loop),从MessageQueue中读取消息,按分发机制将消息分发给目标处理者。