Android Application Fundamentals
Writer. Android.developer
Android applications are written in the Java programming language. The Android SDK tools compile the code—along with any data and resource files—into an Android package, an archive file with an .apk suffix. All the code in a single .apk file is considered to be one application and is the file that Android-powered devices use to install the application.
Once installed on a device, each Android application lives in its own security sandbox:
The Android operating system is a multi-user Linux system in which each application is a different user.
By default, the system assigns each application a unique Linux user ID (the ID is used only by the system and is unknown to the application). The system sets permissions for all the files in an application so that only the user ID assigned to that application can access them.
Each process has its own virtual machine (VM), so an applications code runs in isolation from other applications.
By default, every application runs in its own Linux process. Android starts the process when any of the applications components need to be executed, then shuts down the process when its no longer needed or when the system must recover memory for other applications.
In this way, the Android system implements the principle of least privilege. That is, each application, by default, has access only to the components that it requires to do its work and no more. This creates a very secure environment in which an application cannot access parts of the system for which it is not given permission.
However, there are ways for an application to share data with other applications and for an application to access system services:
Its possible to arrange for two applications to share the same Linux user ID, in which case they are able to access each others files. To conserve system resources, applications with the same user ID can also arrange to run in the same Linux process and share the same VM (the applications must also be signed with the same certificate).
An application can request permission to access device data such as the users contacts, SMS messages, the mountable storage (SD card), camera, Bluetooth, and more. All application permissions must be granted by the user at install time.
That covers the basics regarding how an Android application exists within the system. The rest of this document introduces you to:
1、The core framework components that define your application.
2、The manifest file in which you declare components and required device features for your application.
3、Resources that are separate from the application code and allow your application to gracefully optimize its behavior for a variety of device configurations.
Application Components
Application components are the essential building blocks of an Android application. Each component is a different point through which the system can enter your application. Not all components are actual entry points for the user and some depend on each other, but each one exists as its own entity and plays a specific role—each one is a unique building block that helps define your applications overall behavior.
There are four different types of application components. Each type serves a distinct purpose and has a distinct lifecycle that defines how the component is created and destroyed.
Here are the four types of application components:
Activities
An activity represents a single screen with a user interface. For example, an email application might have one activity that shows a list of new emails, another activity to compose an email, and another activity for reading emails. Although the activities work together to form a cohesive user experience in the email application, each one is independent of the others. As such, a different application can start any one of these activities (if the email application allows it). For example, a camera application can start the activity in the email application that composes new mail, in order for the user to share a picture.
An activity is implemented as a subclass of Activity and you can learn more about it in the Activities developer guide.
Services
A service is a component that runs in the background to perform long-running operations or to perform work for remote processes. A service does not provide a user interface. For example, a service might play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an activity. Another component, such as an activity, can start the service and let it run or bind to it in order to interact with it.
A service is implemented as a subclass of Service and you can learn more about it in the Services developer guide.
Content providers
A content provider manages a shared set of application data. You can store the data in the file system, an SQLite database, on the web, or any other persistent storage location your application can access. Through the content provider, other applications can query or even modify the data (if the content provider allows it). For example, the Android system provides a content provider that manages the users contact information. As su
剩余内容已隐藏,支付完成后下载完整资料
安卓应用程序基础
Android开发人员 著
Android应用程序是用Java程序语言编写的。Android的SDK工具编译的是附带任意数据的代码和到一个Android包以及带一个.apk后缀的归档文件的资源文件。所有的被放在一个单独的.apk文件中的代码被看作是一个应用程序,使用Android的设备就是用apk文件来安装Android应用的。
一旦在设备上安装,每个Android应用都运行在自己的安全“沙盒”中。
Android操作系统是一个多用户Linux系统,在Linux系统中每一个应用程序都是不同的用户。
默认情况下,系统为每个应用分配一个独一无二的Linux用户ID(这个ID仅被系统使用,应用本身是不知道它的)。应用中的所有文件访问许可都被系统设置了此ID,因此,只有被分配了该用户ID的应用可以访问这些文件。
每一个进程有它自己的虚拟机,所以一个应用程序的代码运行是和其他应用程序分开的。
默认情况下,每一个应用程序在他自己的Linux进程中运行,当应用程序的任意组件需要被执行时,Android开始启动进程,当它不再需要被执行或者系统必须为其他程序获得内存时关闭进程。
这样一来,Android系统实现了最小权限原则。也就是说,每一个应用程序,在默认情况下,它能做的工作只有访问组件不能做其他的。这样就创造了一个非常安全的环境,使得应用程序不能访问没有给予权限的部分。
然而,有多种方法使应用程序之间分享数据以及应用程序获取系统服务:
可以使两个应用程序共享相同的Linux用户ID,这样他们能够互相访问文件。为了节约系统资源,有相同用户ID的应用程序也可以在同一个Linux进程中运行,并且共用虚拟机(应用程序也必须使用相同的证书)
应用程序可以请求权限来来获取数据,如用户的联系人、短信、SD卡、摄像头、蓝牙等等。所有的应用程序的权限必须在用户安装时授予。
上面介绍了关于Android应用程序在系统中执行的基础知识。
剩余部分如下:
- 框架的核心组件定义应用程序。
- 声明组件和请求的主文件决定了应用程序的特征。
- 与应用程序分离的资源,它能让你的应用通过各种设备配置很好的优化其行为。
应用程序组件
应用程序组件是Android应用程序的的基本构建块。每一个组件都是系统可以进入程序的不同的点,并非所有的组件要为用户真正进入入口点,一些是互相依赖的,但每一个都做为实体存在并且扮演了重要的角色--每一个都是一个独特的构建块,它帮助定义应用程序的整体行为。
有四种不同类型的应用程序组件。每种类型都有不同的目的,不同的生命周期,它定义了如何创建和销毁组件。
有这四种类型的应用程序组件:
活动
一个activity代表用户界面的一个独立屏幕。例如,一个邮件应用程序应该有一个activity用于显示新邮件列表,另一个activity用于撰写一封邮件,还有一个activity用于读取邮件。尽管所有的activity协同工作以构成邮件应用程序的用户体验,但彼此之间相对独立。因此,不同的应用程序能够从任何一个activity启动(只要邮件应用程序允许)。例如,用户要分享一张照片,一个拍照应用程序能够启动邮件应用程序的activity。
activity是一个实现了Activity的子类,你可以在Activity开发者指导部分了解更多。
服务
service是一个在后台运行的组件,用来执行长期操作或执行远程操作,服务不提供用户界面。例如,一个服务可能在后台播放音乐,同时用户可以在不同的应用程序中,或者从网络上获取数据,而不阻断用户与当前activity的交互。其他组件,比如一个activity,为了与该service互动,可以启动或者绑定它。
service是一个实现了Service的子类,你可以在Service开发者指导部分了解更多。
内容提供者
内容提供者将一些特定的应用程序数据提供给其他应用程序使用。数据可以存储在文件系统、SQLite数据库、网络上或者其他任意应用程序可以访问的不变存储位置。通过内容提供者,其他应用程序可以查询或者修改数据(如果内容提供者允许)。比如,Android系统提供了一个内容提供者管理用户的联系信息。因此,任何有适当权限的应用程序可以查询一部分内容提供商(如ContactsContract.Data)来读写一个特定的人的信息。
内容提供者读写对于程序来说是私有或者不共享的数据也是有用的。例如,记事本示例应用程序使用一个内容提供者保存笔记。
一个内容提供者作为一个ContentProvider子类和一组标准的允许其他应用程序执行事务api被实现。有关更多信息,请参见内容提供者开发人员指南。
广播接收器
广播接收器是一个响应系统的范围的广播通知的组件,许多广播是源于系统的-比如:屏幕广播宣布关闭,电池低,或者照片被捕获。应用程序也可以启动广播-比如:让其他应用程序知道一些数据已经被下载到设备上并且可以被使用。虽然广播接收器不显示一个用户界面,但当广播事件发生时它们可能会创建一个状态栏通知提醒用户。不过,更常见的广播接收器是一个其他组件的“网关”,旨在做最少的工作。例如,它可以启动一个服务来执行基于事件的一些工作。
广播接收器被实现为一个子类BroadcastReceiver和每个广播交付一个意图对象。有关更多信息,请参见BroadcastReceiver类。
安卓系统设计的一个独特的方面是,任何应用程序都可以启动另一个应用程序的组件。例如,如果你希望用户捕捉一张照片与设备摄像头,可能另一个应用程序可以实现,你的应用程序可以使用它,而不是发展一个活动来捕捉一张你自己的照片。你不需要协同甚至连接相机应用程序的代码。相反,你可以简单地启动相机应用程序捕获活动照片。完成后,照片可以返回给应用程序以便你可以使用它。对于用户,好像镜头实际上可以是你的应用程序的一部分。
当系统启动一个组件,应用程序开始启动进程(如果不是已经运行)并实例化类所需的组件。例如,如果您的应用程序启动相机应用程序捕捉照片的活动,这个活动在过程运行属于相机应用程序,而不是在你的应用程序的过程。因此,在大多数其他系统与应用程序,Android应用程序没有一个单一的入口点(例如没有main()函数)。
由于系统运行的每个应用程序在一个单独的流程与文件权限限制访问其他应用程序,应用程序不能直接激活另一个应用程序的组件。然而,Android系统可以做到。为了在另一个应用程序中激活一个组件,你必须提供一个信息系统,指定你的意图开始一个特定的组件。然后系统为你激活组件。
激活组件
四大组件的三个组件-活动(activities)服务(services),和广播接收器( broadcast receivers)-是由一种叫intent的异步消息激活的。这些intents在运行时将这些属于你的程序或不同程序的单独的组件绑定在一起(你可以把它们看作从其他组件请求一个动作的介质),无论组件是否属于你的应用程序还是另一个程序。
一个intent就是一个Intent对象,这个intent定义了一种可以激活某个特定组件或者某种特定类型的组件,这两种定义的方式分别显式或隐式。
对于活动和服务,一个意图定义了动作执行(例如,“视图”或“发送”)和可能指定的URI数据采取行动(其中的组件开始可能需要知道)。例如,一个意图可能传达请求一个活动来显示一个图像或打开一个网页。在某些情况下,你可以启动一个活动获得的结果,在这种情况下,意图的活动也返回结果(例如,可以发出一个意图让用户选择一个个人接触和它回到你返回意图包括一个URI指向选择接触)。
对于广播接收器而言,intent简单地定义了要广播的内容(例如,一个用以表明电池电量很低的广播只包含一个表明电池电量很低的字符串)。
其他组件类型,内容提供商,不被intent激活。而是由接到ContentResolver的请求时激活的。内容解析器处理所有与内容提供者的直接交易,这样的组件与提供者不需要执行交易,而是调用ContentResolver对象上的方法。这使得一个抽象层之间的内容提供者和组件请求信息(安全)。
有独立的方法来激活每个类型的组件:
你可以开始一个活动(或给它一些新的东西)通过一个带有startActivity()或startActivityForResult()(当你想要返回结果的活动)的intent。
你可以通过一带有startService()的intent开始一个服务(或给一个正在进行的新指令服务)。或者通过一个带有tobindService()的intent绑定到服务。
你可以通过一个sendBroadcastsendOrderedBroadcast(),或sendStickyBroadcast()等方法()的intent,发起一个广播
你可以通过调用ContentResolver查询()执行一个查询一个内容提供商
关于使用意图的更多信息,请参见意图和意图过滤器文件。更多信息激活特定的组件还提供下列文件:活动、服务、广播收音机和内容提供商。
声明组件
清单的首要任务是要告知系统应用程序的组件。例如,一个清单文件可以声明一个活动如下:
lt;?xml version='1.0' encoding='utf-8'?gt;
lt;manifest ... gt;
lt;application android:icon='@drawable/app_icon.png' ... gt;
lt;activity android:name='com.example.project.ExampleActivity'
android:label='@string/example_label' ... gt;
lt;/activitygt;
...
lt;/applicationgt;
lt;/manifestgt;
在这个lt;applicationgt;部分,android图标属性指向资源标识应用程序的图标。
在lt;activitygt;部分,android:name属性指定完全限定类名的活动子类 android:标签属性指定一个字符串作为活动的用户可见的标签。
你必须用下列方式声明所有的应用程序组件:
1、activities:lt;activitygt;标签
2、services :lt;servicegt;标签
3、broadcast receivers:lt;receivergt;标签
4、content providers:lt;providergt; 标签
如果程序中用到 activities、services、和content providers,你没有在mainfest文件中声明,那么这些组件不会被系统知道,结果就是你的程序不能运行。然而,broadcast receivers既可以在mainfest文件中 声明也可在代码中动态创建(作为BroadcastReceiver 项目)并通过调用资料编号:[479922],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。