应用基础知识
Android 应用在系统内存在方式
java代码+数据+资源 编译到一个APK中。安装到设备后,每个android应用都运行在自己的安全沙箱内。
- android系统是一种多用户Linux系统,其中每个应用都是一个不同的用户。
- 默认情况下,系统会为每个应用分配一个唯一的linux用户id。系统为应用中的所有文件设置权限,使得只有分配给该应用的用户id才能访问。
- 每个进程都有自己的虚拟机,因此应用代码是在与其他应用隔离的环境运行
- 默认情况下,每个应用都在自己的linux进程内运行。
不过,仍然可以通过其他途径与其他应用共享数据及访问系统服务
- 可以安排两个应用共享同一个linux用户id,这样就可以彼此访问文件。
- 可以请求访问权限(相机,通信录等)。
应用组件
应用组件是android应用的基本构建基块。每个组件都是一个不同的点,系统通过他进入应用。
共有四种不同的应用组件类型:
- Activity:代表具有用户界面的单一屏幕。
- Service: 不提供界面,在后台长时间运行。
- contentProvider:管理一组共享数据。其他应用通过contentprovider访问,修改。
- Broadcast:用于响应系统范围广播通知的组件。许多广播都是由系统发起的 — 例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播 — 例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。
没有main函数的概念,只有组件的概念,任何应用都可以启动其他应用的组件。之前提到每个应用都有自己的用户id,不能访问其他应用的文件,不过android系统却可以,所以如果你想启动另一个应用的组件,需要传递一个Intent给系统。
启动组件
Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。
Intent 不会启动另一个组件类型 - 内容提供程序,后者会在成为 ContentResolver
的请求目标时启动。
每种类型的组件有不同的启动方法:
- 您可以通过将
Intent
传递到startActivity()
或startActivityForResult()
(当您想让 Activity 返回结果时)来启动 Activity(或为其安排新任务)。 - 您可以通过将
Intent
传递到startService()
来启动服务(或对执行中的服务下达新指令)。 或者,您也可以通过将Intent
传递到bindService()
来绑定到该服务。 - 您可以通过将
Intent
传递到sendBroadcast()
、sendOrderedBroadcast()
或sendStickyBroadcast()
等方法来发起广播; - 您可以通过在
ContentResolver
上调用query()
来对内容提供程序执行查询。
清单文件
在 Android 系统启动应用组件之前,系统必须通过读取应用的 AndroidManifest.xml
文件(“清单”文件)确认组件存在。 您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。
还有权限,特性等也在manifest文件中声明。