从今天开始,我将系统的学习安卓的开发,根据知乎的大神们的介绍,决定仔仔细细的把 Android API Guide 过一遍,并且在上面做一些记录,以便巩固复习和留做记录。这里很可能只有一些结论性的东西和一些提示,具体的东西还是要回Android Developers去看了。
Google 就是我的命啊,GoAgent千万不能倒啊……
言归正传,Introduction to Android太简单了,今天就从Application Fundamentals开始看起。
Android App介绍
- Android系统每个APP都有一个自己的user ID, 这是默认分配的,只是给OS使用,对App本身无用。
- 每个App都运行在一个VM(虚拟机)上面,默认情况下每个App都有一个Linux进程,当系统资源不足时长时间没有运行的App进程可能会被shutdown。
- 系统中的每个App都是独立的,当没有给予足够的权限的时候,是不能够access别的App和系统组件。
- 可以将两个App运行在一个user ID上,这样两个App就可以在进程上进行通信,也可以共享彼此间的文件,但是需要同样的签名。
- APP可以申请不同的权限,但是需要在安装的时候允许该权限。
对于APP而言,大的框架方面有以下定义:
- 核心框架定义了整个App
- manifest文件定义了app的组件和权限
- 资源文件和App code是分离的,这样有助于应对Android碎片化。
App组件
App的四个组件有各自的生命周期。通过四个组件共舞,编造出一个完整的App生态系统!
1.Activities
Activity会呈现在屏幕上呈现一个用户接口。一般来说,每个App都有多个Activity,这些Activity之间一般都会围绕一个主题展示不同的页面,当然不同的App之间也可以开启彼此的不同的Activity,比如说照相机查看相片会调用相册的展示照片的Activity,淘宝网页点击某些按钮会定向到淘宝的Activity等等。
定义Activity子类需要继承Activity类。
2.Service
Service是一个系统后台长时间操作或者远程操作的组件,不提供可视化界面。比如说播放音乐、下载等,不会对UI造成影响。另一个方面,Activity可以开启Service或者绑定之与其进行交互。
定义Service子类需要继承Service类。
3.Content providers
Content provider管理应用的储存数据,包括 File system 和 Database、web 等等你可以访问的地址。通过Content providers,App可以访问甚至修改数据,比如说联系人信息。当然Content provider可以私有也可以共享。
定义Content provider子类需要继承Content provider类。
4.Broadcast receivers
Broadcast receiver用来响应系统的广播。比如说:屏幕关闭、电量低、截屏等等。App也可以启动广播。广播可以推送到通知栏,但更多是为了实现一些很小的工作量。
Android系统最大的特点是App没有一个固定的入口,而且每个App都可以访问其他的App的不同Activity,比如说照相机可以访问相册的Activity。在访问别的App的Activity时需要使用Intent进行传递信息,然后系统会自动寻找并打开需要的Activity。
Intent对象
Intent对象可以用在activities、services和broadcast receivers,分为explicit Intent和implicit Intent。
对于activities和services,Intent需要定义action或者URI,某些情况下可以通过Intent获得返回值。使用startActivity()和startActivityForResult()开启一个Activity。通过startService()开启一个Service,或者通过bindService()绑定一个Service。
对于broadcast receivers,Intent只定义了通知广播。具体方法有sendBroadcast()、sendOrderedBroadcast()和sendStickyBroadcast()。
对于content provider,不是使用Intent激活,而是使用ContentResolver。这样更安全。你可以调用ContentResolver的query()方法激活content provider。
Manifest文件
Manifest文件定义了以下内容:
- user的权限
- API等级
- 软硬件的需要
- 其他的API链接库
- 其他
1.申明组件:
...
- android:icon App图标
- android:name Activity子类的类名
- android:label Activity的标签
elements for activities elements for services elements for broadcast receivers elements for content providers
2.申明组件能力
...
3.申明App的需求
...
申明了最小的API Level和生成的API Level。
App资源
App的组件除了代码之外还会有音视频文件、图片和其他视觉呈现文件。特别需要指出的是需要定义一个XML文件来定义动画,菜单,款式,颜色,以及用户界面。
对于每一个资源文件,SDK构建工具会生成唯一的数字ID,比如说有一张图片为 logo.png,保存在res/drawable/ 目录,则可以通过R.drawable.logo这个ID进行访问。
还有一个重要的提示是,要将code和其他本地化的资源分开,比如说UI的字符串最好在XML中定义,有助于App翻译为其他语言。Android还支持存放不同规格的设计文件以应对不同的设备,比如说不同的layout文件适应不同的屏幕大小。