<commit_before>---
layout: post
title: Android 应用基础
category: Android
tags: Android
keywords:
description:
---

# android应用基础
原文地址：[https://developer.android.com/guide/components/fundamentals.html](https://developer.android.com/guide/components/fundamentals.html)

通常android应用使用java语言编写。android SDK会将你的代码和资源文件编译为一个后缀名为.apk的APK压缩文件。
APK文件包含android应用的所有内容，他是android设备安装应用的文件。  
一旦app安装到android设备，每一个app都在运行在自己的安全沙盒内：

 - android是一个多用户的linux操作系统，每个app就是一个不同的用户。
 - 系统会默认给每一个app一个唯一的linux user ID（这个ID只能有系统使用，app自己并不知道）。系统为app的所有文件设置权限，只有这个特定app可以操作这些文件。
 - 每个进程都有它独立的虚拟机（VM），所以app之间是完全隔离的。
 - 每个app默认运行在一个独立的linux进程中。当app的任何一个组件被需要执行是，android会启动应用的进程。当不在需要这个应用或系统需要为其他应用回收内存时关闭这个进程。

Android系统可以通过这种方式实现最小权限原则。也就是说，默认情况下，每个应用只能访问执行其工作所需的组件，而不能访问其他组件。
这样便营造出一个非常安全的环境，在这个环境中，应用无法访问系统中其未获得权限的部分。
不过，应用仍然可以通过一些途径与其他应用共享数据及访问系统服务：

  - 可以安排两个应用共享同一Linux用户ID，在这种情况下，它们能够相互访问彼此的文件。为了节省系统资源，可以安排具有相同用户ID的应用在同一Linux进程中运行，并共享同一VM（应用还必须使用相同的证书签名）；
  - 应用可以请求访问设备数据（如用户的联系人、短信、可装入存储装置[SD卡]、相机、蓝牙等）的权限。所有应用权限都必须由用户在安装时授予。

应用组件
---
应用组件是android应用的基本构建基块。每个组件都是一个不同的点，系统可以通过它进入您的应用。
并非所有组件都是用户实际入口点，有些组件相互依赖，但每个组件都一独立实体形式存在，并发挥特定作用。每个组件都是唯一的构建基块，有助于定义应用的总体行为。
共有四种不同的应用组件类型。每种类型都服务与不同的目的，并且具有定义组件的创建和销毁方式的不同生命周期。  
这四种应用组件是：Activity、Service、Content provider、Broadcast receiver

启动组件
---
四种组件类型种的三种：Activity、Service和Broadcast receiver通过名为Intent的异步消息进行启动。
Intent会在运行时将各个组件相互绑定（您可以将Intent看做从其他组件请求操作的信使），无论组件属于您的应用还是其他应用。  
Intent可以显式声明，也可以隐式声明。隐式Intent的作用无非是描述要执行的操作类型（还可选择描述您想执行的操作所针对的数据）， 让系统能够在设备上找到科执行该操作的组件，并启动该组件。<commit_msg>modify android fundamentals<commit_after>---
layout: post
title: Android 应用基础
category: Android
tags: Android
keywords:
description:
---

# android应用基础
原文地址：[https://developer.android.com/guide/components/fundamentals.html](https://developer.android.com/guide/components/fundamentals.html)

通常android应用使用java语言编写。android SDK会将你的代码和资源文件编译为一个后缀名为.apk的APK压缩文件。
APK文件包含android应用的所有内容，他是android设备安装应用的文件。  
一旦app安装到android设备，每一个app都在运行在自己的安全沙盒内：

 - android是一个多用户的linux操作系统，每个app就是一个不同的用户。
 - 系统会默认给每一个app一个唯一的linux user ID（这个ID只能有系统使用，app自己并不知道）。系统为app的所有文件设置权限，只有这个特定app可以操作这些文件。
 - 每个进程都有它独立的虚拟机（VM），所以app之间是完全隔离的。
 - 每个app默认运行在一个独立的linux进程中。当app的任何一个组件被需要执行是，android会启动应用的进程。当不在需要这个应用或系统需要为其他应用回收内存时关闭这个进程。

Android系统可以通过这种方式实现最小权限原则。也就是说，默认情况下，每个应用只能访问执行其工作所需的组件，而不能访问其他组件。
这样便营造出一个非常安全的环境，在这个环境中，应用无法访问系统中其未获得权限的部分。
不过，应用仍然可以通过一些途径与其他应用共享数据及访问系统服务：

  - 可以安排两个应用共享同一Linux用户ID，在这种情况下，它们能够相互访问彼此的文件。为了节省系统资源，可以安排具有相同用户ID的应用在同一Linux进程中运行，并共享同一VM（应用还必须使用相同的证书签名）；
  - 应用可以请求访问设备数据（如用户的联系人、短信、可装入存储装置[SD卡]、相机、蓝牙等）的权限。所有应用权限都必须由用户在安装时授予。

应用组件
---
应用组件是android应用的基本构建基块。每个组件都是一个不同的点，系统可以通过它进入您的应用。
并非所有组件都是用户实际入口点，有些组件相互依赖，但每个组件都一独立实体形式存在，并发挥特定作用。每个组件都是唯一的构建基块，有助于定义应用的总体行为。
共有四种不同的应用组件类型。每种类型都服务与不同的目的，并且具有定义组件的创建和销毁方式的不同生命周期。  
这四种应用组件是：[activities](https://developer.android.com/guide/components/activities.html)、
[Services](https://developer.android.com/guide/components/services.html)、
[Content providers](https://developer.android.com/guide/topics/providers/content-providers.html)、
Broadcast receivers

启动组件
---
四种组件类型种的三种：Activity、Service和Broadcast receiver通过名为Intent的异步消息进行启动。
Intent会在运行时将各个组件相互绑定（您可以将Intent看做从其他组件请求操作的信使），无论组件属于您的应用还是其他应用。  
Intent可以显式声明，也可以隐式声明。隐式Intent的作用无非是描述要执行的操作类型（还可选择描述您想执行的操作所针对的数据）， 让系统能够在设备上找到科执行该操作的组件，并启动该组件。
{'fraction_non_alphanumeric': 0.09364445809026711, 'fraction_numerical': 0.0, 'mean_word_length': 12.24390243902439, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 7, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '978036', 'n_tokens_mistral': 2290, 'n_tokens_neox': 2624, 'n_words': 88}