「安卓开发指南」——安卓应用基础

从今天开始,我将系统的学习安卓的开发,根据知乎的大神们的介绍,决定仔仔细细的把 Android API Guide 过一遍,并且在上面做一些记录,以便巩固复习和留做记录。这里很可能只有一些结论性的东西和一些提示,具体的东西还是要回Android Developers去看了。

Google 就是我的命啊,GoAgent千万不能倒啊……


言归正传,Introduction to Android太简单了,今天就从Application Fundamentals开始看起。

「安卓开发指南」——安卓应用基础_第1张图片
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文件适应不同的屏幕大小。

你可能感兴趣的:(「安卓开发指南」——安卓应用基础)