首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android开发指南1-框架正题-基础知识

2012-09-01 
Android开发指南1-框架主题-基础知识应用程序基础关键类ActivityServiceBroadcastReceiverContentProvider

Android开发指南1-框架主题-基础知识

应用程序基础

关键类
  1. Activity
  2. Service
  3. BroadcastReceiver
  4. ContentProvider
  5. Intent

Android应用程序使用Java做为开发语言。aapt工具把编译后的Java代码连同其它应用程序需要的数据和资源文件一起打包到一个Android包文件中,这个文件使用.apk做为扩展名,它是分发应用程序并安装到移动设备的媒介,用户只需下载并安装此文件到他们的设备。单一.apk文件中的所有代码被认为是一个应用程序。

从很多方面来看,每个Android应用程序都存在于它自己的世界之中:

  • 默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程,而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。
  • 每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。
  • 默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,并加以权限设置,使得应用程序的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的应用程序所访问。

    使两个应用程序共有同一个用户ID是可行的,这种情况下他们可以看到彼此的文件。从系统资源维护的角度来看,拥有同一个ID的应用程序也将在运行时使用同一个Linux进程,以及同一个虚拟机。

    应用程序组件

    Android的核心功能之一就是一个应用程序可以使用其它应用程序的元素(如果那个应用程序允许的话)。比如说,如果你的应用程序需要一个图片卷动列表,而另一个应用程序已经开发了一个合用的而又允许别人使用的话,你可以直接调用那个卷动列表来完成工作,而不用自己再开发一个。你的应用程序并没有吸纳或链接其它应用程序的代码,它只是在有需求的时候启动了其它应用程序的那个功能部分。

    为达到这个目的,系统必须在一个应用程序的一部分被需要时启动这个应用程序,并将那个部分的Java对象实例化。与在其它系统上的应用程序不同,Android应用程序没有为应用准备一个单独的程序入口(比如说,没有<manifest . . . >
    <application . . . >
    <activity android:name="com.example.project.FreneticActivity"
    android:icon="@drawable/small_pic.png"
    android:label="@string/freneticLabel"
    . . . >
    </activity>
    . . .
    </application>
    </manifest>

    <activity>元素的name属性指定了实现了这个activity的?Activity的子类。icon和label属性指向了包含展示给用户的此activity的图标和标签的资源文件。

    其它组件也以类似的方法声明──<service>?元素用于声明服务,?<receiver>?元素用于声明广播接收器,而?<provider>?元素用于声明内容提供者。 manifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不会被运行。然而,广播接收器既可以在manifest文件中声明,也可以在代码中进行动态的创建,并以调用Context.registerReceiver()的方式注册至系统。

    欲更多了解如何为你的应用程序构建manifest文件,请参阅AndroidManifest.xml文件一章。

    Intent过滤器

    Intent对象可以被显式的指定目标组件。如果进行了这种指定,Android会找到这个组件(依据manifest文件中的声明)并激活它。但如果Intent没有进行显式的指定,Android就必须为它找到对于intent来说最合适的组件。这个过程是通过比较Intent对象和所有可能对象的intent过滤器完成的。组件的intent过滤器会告知Android它所能处理的intent类型。如同其它相对于组件很重要的信息一样,这些是在manifest文件中进行声明的。这里是上面实例的一个扩展,其中加入了针对activity的两个intent过滤器声明:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest . . . >
    <application . . . >
    <activity android:name="com.example.project.FreneticActivity"
    android:icon="@drawable/small_pic.png"
    android:label="@string/freneticLabel"
    . . . >
    <intent-filter . . . >
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter . . . >
    <action android:name="com.example.project.BOUNCE" />
    <data android:type="image/jpeg" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </activity>
    . . .
    </application>
    </manifest>

    示例中的第一个过滤器──action “"FLAG_ACTIVITY_NEW_TASK经常合并使用。这时,这些标记提供了一种