[android]Application Fundamentals

来源:互联网 发布:水滴wifi破解软件 编辑:程序博客网 时间:2024/05/02 06:46

原文http://developer.android.com/guide/topics/fundamentals.html

  Android使用Java语言开发应用。Android的开发工具将所有代码,数据,资源文件编译成一个Android package,就是一个apk文件。一个apk文件就相当于一个应用程序。

  一旦在机器上装载,应用程序就只生存在自己的沙盒中。

1 Android是一个多用户的Linux操作系统,每一个应用程序都是一个不同的用户。

2 默认的情况下,系统会为每一个应用程序分配一个User ID,并且为这个程序中所用的文件设置访问许可,只允许属于这个User ID的应用程序能访问。

3 每一个进程都用一个自己的VM,所以每一个应用程序都独立于其他应用程序运行。

4 默认情况下,每一个应用程序都运行在一个进程上。Android运行这个进程,当这个应用程序的组件需要被执行的时候。关闭这个进程当这个应用不在需要,或者系统需要为别的应用程序释放内存。


由于以上原因,Android实现了最小权限,一个应用程序只能访问那些它需要的组件,而不能访问系统没有给它访问权限的组件。

 当然,也是有几种方法去共享数据和访问系统服务的。

1 可以让两个不同的应用程序共享一个User ID,这样他们可以访问彼此的文件。为了节省系统资源,也可以让这两个应用程序运行在一个进程中,共享一个VM

2 应用程序也可以要求取得系统的服务,这些要求必须要用户安装的时候取得。


Application Components

 应用程序组件是Android应用最近本的组成。每一个组件都是系统不同的切入点。虽然对于用户,并不都是实际的切入点,需要相互的依赖。

Activities

 一个activities表现成一个屏幕上的用户界面,不如email程序中的,mail list或者 编写mail的界面。虽然这些界面看起来是紧密的联系在一起,但其实是相互独立的。其他程序可以启动他们其中一个activities。例如照相机程序可以启动email中的编写mail程序去分享照片。

Services

services是运行在后台的服务。

Content providers

content providers管理着共享的应用程序数据。你可以存放数据到file system SQLite database web or其他应用能够访问到的地方,通过content provider,你可以进行查询或者修改。

content providers对私有数据也是非常有用的。比如Note Pad程序,当你需要保存文件的时候。

Broadcast receivers

一个broadcast receivers 是去响应系统范围内的通知,比如系统通知的手机翻转,电池电量,应用程序通知的下载完毕等等


在android中一个独一的设计就是任何程序都可以启动别的程序的组件。比如你想要取得一个照片,你可以到其他程序中找到同样的组件并使用它。


当系统启动一个组件,就会启动这个应用程序的进程。初始化这个组件需要的类。比如取得照片程序,一但启动这个activities,就启动pohto这个应用的process,所以和其他系统不同,Android没有唯一的进入点(main())

你需要传递一个intent到系统去启动别的应用的组件。

Activating Components

应用程序组件是Android应用最近本的组成。每一个组件都是系统不同的切入点。虽然对于用户,并不都是实际的切入点,需要相互的依赖。
Activities
 一个activities表现成一个屏幕上的用户界面,不如email程序中的,mail list或者 编写mail的界面。虽然这些界面看起来是紧密的联系在一起,但其实是相互独立的。其他程序可以启动他们其中一个activities。例如照相机程序可以启动email中的编写mail程序去分享照片。
Services
services是运行在后台的服务。
Content providers
content providers管理着共享的应用程序数据。你可以存放数据到file system SQLite database web or其他应用能够访问到的地方,通过content provider,你可以进行查询或者修改。
content providers对私有数据也是非常有用的。比如Note Pad程序,当你需要保存文件的时候。
Broadcast receivers
一个broadcast receivers 是去响应系统范围内的通知,比如系统通知的手机翻转,电池电量,应用程序通知的下载完毕等等


在android中一个独一的设计就是任何程序都可以启动别的程序的组件。比如你想要取得一个照片,你可以到其他程序中找到同样的组件并使用它。


当系统启动一个组件,就会启动这个应用程序的进程。初始化这个组件需要的类。比如取得照片程序,一但启动这个activities,就启动pohto这个应用的process,所以和其他系统不同,Android没有唯一的进入点(main())
你需要传递一个intent到系统去启动别的应用的组件。
Activating Components


这三个组件都是被叫做intent的异步message去激活。intent是在运行时联系不同组件的,不管这些组件是你的还是别人的。


比如activities和services。一个intent定义了一个动作去显示或者去发送,或者指定一个数据的地址去操作。比如一个intent可能会传递一个请求到activities去显示一个照片。你可以让一个activities去取得一个结果或者返回一个结果。


再比如broadcast receivers,intent就很简单的就是要广播的内容,比如string of 电量过低。


content provider不是同intent去激活而是通过contentresolver去发送请求。组件通过调用contentresolver的方法去实现而不是通过intent。


以上有多种不同的方法激活组件:

1 你可以启动一个activities(或者让它做另外的动作)你可以通过startActivity()或者startActivityForResult()传递一个intent

2 你可以启动一个service通过startService()传递一个intent

3 你可以初始化一个广播,通过传递一个intent到setBroadcast()

4 你可以查询一个content通过query()在ContentResolve

The Manifest File

  在android系统启动某个组件的时候,系统需要通过阅读manifest文件去知道这个组件存在在这个应用中。你必须声明这个应用的所有组件在这个manifest文件中,而且必须放在工程的根目录中。

当然除了声明组件外,manifest还做了别的事情:


1 识别程序需要的用户许可,比如internet访问,contact取得

2 声明需要最小级别的api

3 声明需要的硬件环境和软件特性,比如照相机,多点触摸

4 需要连接的api 库 比如google map

Declaring components


首要的任务仍然是声明应用程序的组件:

<?xml version="1.0" encoding="utf-8"?><manifest ... >    <application android:icon="@drawable/app_icon.png" ... >        <activity android:name="com.example.project.ExampleActivity"                  android:label="@string/example_label" ... >        </activity>        ...    </application></manifest>
  • <activity> elements for activities
  • <service> elements for services
  • <receiver> elements for broadcast receivers
  • <provider> elements for content providers
activity service 和 content provider都必须在manifest中定义,不然系统永远不会知道。但是broadcast reciver可以定义在manifest或者动态定义。

Declaring component capabilities

  根据上面的讨论,当你要激活一个组件的时候,你可以传递一个intent,给一个确切的类名。但是intent最有威力的作用还是在传递动作上。intent定义了需要如何的动作,系统需要找一个组件的实施这个动作,但是在多个组件的适合的情况下选择哪个一个组件的实施呢?

 方法是系统会选择的组件需要比较在manifest上的intent filters

当你定义一个组件在manifest文件中的时候,你可以选择的定义它的能力,通过 <intent-filter> ,它能响应别的应用来的intent。

Declaring application requirements


现在有各种各样不同的设备装载了android,但是他们又不同的功能和特性。为了让你的程序停止安装当缺少硬件环境的情况下



原创粉丝点击