android 应用基础知识

每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护:

Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户;
默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件;
每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。
默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。

应用仍可通过一些途径与其他应用共享数据以及访问系统服务:

1 . 可以安排两个应用共享同一 Linux 用户 ID,在此情况下,二者便能访问彼此的文件。为节省系统资源,也可安排拥有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM。应用还必须使用相同的证书进行签名

  1. 应用可以请求访问设备数据(如用户的联系人、短信消息、可装载存储装置(SD 卡)、相机、蓝牙等)的权限。用户必须明确授予这些权限。如需了解详细信息,请参阅使用系统权限

应用组件

应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。

共有四种不同的应用组件类型:

Activity
服务
广播接收器
内容提供程序

启动组件

每种组件都有不同的启动方法:

  • 如要启动 Activity,您可以向 [startActivity()](https://developer.android.com/reference/android/content/Context#startActivity(android.content.Intent))[startActivityForResult()](https://developer.android.com/reference/android/app/Activity#startActivityForResult(android.content.Intent, int)) 传递 [Intent](https://developer.android.com/reference/android/content/Intent)(当您想让 Activity 返回结果时),或者为其安排新任务。
  • 在 Android 5.0(API 级别 21)及更高版本中,您可以使用 [JobScheduler](https://developer.android.com/reference/android/app/job/JobScheduler) 类来调度操作。对于早期 Android 版本,您可以通过向 [startService()](https://developer.android.com/reference/android/content/Context#startService(android.content.Intent)) 传递 [Intent](https://developer.android.com/reference/android/content/Intent) 来启动服务(或对执行中的服务下达新指令)。您也可通过向将 [bindService()](https://developer.android.com/reference/android/content/Context#bindService(android.content.Intent, android.content.ServiceConnection, int)) 传递 [Intent](https://developer.android.com/reference/android/content/Intent) 来绑定到该服务。
  • 您可以通过向 [sendBroadcast()](https://developer.android.com/reference/android/content/Context#sendBroadcast(android.content.Intent))[sendOrderedBroadcast()](https://developer.android.com/reference/android/content/Context#sendOrderedBroadcast(android.content.Intent, java.lang.String))[sendStickyBroadcast()](https://developer.android.com/reference/android/content/Context#sendStickyBroadcast(android.content.Intent)) 等方法传递 [Intent](https://developer.android.com/reference/android/content/Intent)来发起广播。
  • 您可以通过在 [ContentResolver](https://developer.android.com/reference/android/content/ContentResolver) 上调用 [query()](https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal)),对内容提供程序执行查询。

清单文件

在 Android 系统启动应用组件之前,系统必须通过读取应用的清单文件 (AndroidManifest.xml) 确认组件存在。您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。

除了声明应用的组件外,清单文件还有许多其他作用,如:

  • 确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
  • 根据应用使用的 API,声明应用所需的最低 API 级别。
  • 声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
  • 声明应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库。

你可能感兴趣的:(android 应用基础知识)