[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。
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
Declaring component capabilities
<intent-filter>
,它能响应别的应用来的intent。Declaring application requirements
- Android - Application Fundamentals.
- Android Basics:Application Fundamentals
- [android]Application Fundamentals
- Android Application Fundamentals
- Forward: Android Application Fundamentals
- Android Application Fundamentals
- android Application Fundamentals翻译
- Android Application Fundamentals 学习笔记
- Android应用程序基础(Application Fundamentals)
- Android 应用基础 - Application Fundamentals
- Android API Guides--Application Fundamentals
- Android-Android官方文档阅读-Application Fundamentals
- Application Fundamentals
- Application Fundamentals
- Application Fundamentals
- Application Fundamentals
- Application Fundamentals
- Application Fundamentals
- MVC3.0 中Razor 学习
- 3种减少Flex文件大小的方法
- Visual Studio 2005下编写DLL程序
- 一个以引用作为参数的函数无法接收一个常量作为实参
- java问号表达式用法
- [android]Application Fundamentals
- Oracle External Table (1)
- {php 字符串函数}
- 模糊查询的优化
- Android演示使用PULL方式解析XML文件
- POCSAG编码和BCH(31,21)校验详解
- hdu 1542 poj/pku 1151(线段树求面积并)
- VIM 手册
- zoj 3538 Arrange the Schedule