今天将我之前几个月整理的关于Android的一些知识点分享给大家参考学习学习,由于内容较多我分成了两篇文章来讲解,分别为:基础知识和核心知识。今天这篇就先来讲讲Android基础知识,下一篇讲Android核心知识(内容有点多)。
底层原理
- Android 操作系统是一个多用户 Linux 操作系统,每个应用都是一个用户
- 操作系统一般会给每个应用分配一个唯一的 Linux 用户 ID,这个 ID 对应用是不可见的。但有些情况下两个应用可以共享同一个 Linux 用户 ID,此时他们可以访问彼此的文件,甚至还可以运行在同一个 Linux 进程中,共享同一个虚拟机。但两个应用的签名必须是一样的
- 每个进程都有自己的虚拟机,一般每个应用都运行在自己的 Linux 进程中
应用组件
- 应用没有唯一的入口,没有
main()
函数,因为应用是由多个组件拼凑在一起的,每个组件都是系统或者用户进入应用的入口,组件之间既可以是相互独立的,也可以是相互依赖的。系统和其它应用在被允许的情况下可以启动/激活一个应用的任意一个组件 - 组件有四种类型:
Activity
,Service
,BroadcastReceiver
和ContentProvider
Activity
Activity
表示一个新的用户界面,只能由系统进行创建和销毁,应用只能监听到一些生命周期回调,这些回调通常也被叫作生命周期方法Activity
的名字一旦确定好就不要再更改了,否则可能会引发一系列问题
Service
Service
表示一个后台服务,Service
可以是独立的,可以在应用退出后继续运行。也可以绑定到其他进程或Activity
,表示其他进程想使用这个Service
,像输入法、动态壁纸、屏保等系统功能都是以Service
的形式存在的,在需要运行的时候进行绑定- 大部分情况下,更建议使用
JobScheduler
,因为JobScheduler
和Doze
API 配合下一般会比简单使用Service
更省电
BroadcastReceiver
BroadcastReceiver
是一个事件传递的组件,通过它应用可以响应系统范围的广播通知。系统的包管理器会在安装应用时将应用中的静态广播接收器注册好,所以即使应用没在运行,系统也能把事件传递到该组件。- 通过
BroadcastReceiver
可以实现进程间通信
ContentProvider
ContentProvider
是在多个应用间共享数据的组件,如果应用的一些数据想要被其它应用使用,必须通过ContentPrivider
进行管理,不过应用的私有数据也可以通过ContentProvider
进行管理,主要还是因为ContentProvider
提供了共享数据的抽象,使用者不需要知道数据究竟是以文件形式还是数据库等其他形式存储的,只需要通过ContentProvider