`
zkgale
  • 浏览: 102587 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Anatomy of an Android Application(中文翻译)

阅读更多

 

Anatomy of an Android Application(中文翻译)

一个Android应用程序由下面四种组件构成:

  • Activity
  • Intent Receiver
  • Service
  • Content Provider

并不是每一个应用程序需要全部的以上四个组件, 但是你会用他们的不同组合来完成你的应用程序。

一旦你决定你的应用程序需要哪些组件,你应该把他们写入一个叫做AndroidManifest.xml的文件。 这个文件是一个XML文件, 在这个文件里

你声明了程序的组件以及组件的功能和前提条件。更多的内容,请看下面的连接:http://code.google.com/android/devel/bblocks-manifest.html



Activity

Activitiy 是四种组件中最常用的一种, 一个activity经常表现为你程序中的一个屏幕,每个activity都是通过对Activity基类的继承来实现

的。你的这个activity类应该显示一个由View组成的用户界面,并且能够对事件做出反映。大部分的应用程序由多个屏幕组成。例如, 一个文

字短信程序由第一个屏幕显示一个联系人列表用来发送信息,而第二个屏幕用来写短信息,另外一个屏幕查看短信息或对程序进行设置。每个

屏幕都是由一个activity来实现的。通过开始一个新的activity你可以进入到新的屏幕中。在某些情况下一个activity会给前一个activity返

回一个值--例如一个让用户进行照片选择的activity会把选择的照片送回至使用过它进行选择的那个activity。

当一个新的屏幕打开了, 前一个屏幕就暂停了,并且进入了一个堆栈。用户可以通过“向后”来直达以前用过个一个屏幕。如果它没有保留价值

了,屏幕也可以从堆栈中移出。Android从初始屏幕开始为每个应用程序保留一个堆栈。


Intent and Intent Filters


Android使用一个特殊的叫做Intent的类从一个屏幕移动到另一个屏幕。一个Intent描述了一个应用程序要完成的事情。Intent中最重要的两个

数据结构是行为(Action)以及这个行为所要操作的数据(the data to act upon)。 典型的行为是MAIN(activity的前门),VIEW,PICK,EDIT

等等。那些被操作的数据表现为URI。例如,为了看一个人(A)的Contact信息,你应该创建一个Intent,这个Intent拥有一个VIEW行为和一个

数据集,这个数据集通过URI指向了A。

与此相关的,有一个类叫做IntentFilter。如果说Intent是说明了对做某事提供了有效的反应,那么Intent Filter就是要说明一个对

activity(或者intent recevier,见下文)的哪些请求能够进行处理。一个能够显示某人联系信息的activity应该声明一个intetfilter,当VIEW指向了某人的时候,此

interfilter声明了它知道如何处理VIEW的行为,Acitivity的相关IntenFilter声明要写入AndroidManifest.xml文件中

从一个屏幕转换到另外一个屏幕是通过解析一个目的来完成的。例如:“向前”。一个activity执行startActivity(myIntent)。系统于是开始在

intent filter中寻找所有安装过的程序然后选择那个和myIntent最为匹配的那个activity.一个新的activity因为这个intent所驱动,开始运

行。当startActivity()被执行时, 一个intent的解析就开始进行处理了。这样做有两点好处:

1. 只需要简单以intent的形式发出一个请求,那么一个Activity的功能就可以从其他组件中开始复用了。
2. 一个activity可以在任何时候被新的、含有相同IntentFilter的Activity替代。



Intent Receiver

你可以利用IntentReceiver编程,如果你希望你的应用程序能够对一些扩展事件做出反映。例如,当有电话打进来时,当网络空闲,午夜等。

Intent Recevier不会显示一个UI,尽管如果有些有趣的事情发生了,他们也许会用到NotficationManager去警告用户。Intent Receivers应该

在AndroidManifest.xml中被声明,但是你也可以通过Context.registerReceiver()来声明。如果有必要当一个Intent Receiver被触发时,系统

会启动你的程序,你的程序不必运行它的IntentFilter以等待被呼叫。应用程序也可以通过Context.broadcastIntent()来对他们的intent进行

广播。



Service

服务是一直运行,但是没有用户界面的程序。一个好的例子就是媒体播放器播放曲目表中的歌曲。在一个媒体播放器程序中, 也许会有一个或

多个Activity,他们被用来进行选择和播放歌曲。然而一个正在播出的歌曲的句柄不能够被交出去,因为用户希望即使他们已经切换到了另外一

个屏幕,歌曲还是一直在播放的。这个时候媒体播放器应该用Context.startService()来启动一个服务在后台继续播放音乐。系统会保持歌曲

的播放直到它结束为止。(通过阅读 http://code.google.com/android/intro/lifecycle.html你可以了解到更多的关于系统中的优先权的信

息)注意:你可以通过Context.bindService()来连接并(启动)一个服务(如果它不在运行中)。当你连接到一个服务的时候,你可以通过

它开放的接口和这个服务进行通讯。例如音乐播放,通过开放接口可以让你暂停或重播。

Content Provider

程序可以把他们的数据存储到一个文件中, 数据库中或者其它任何有对于它来说有意义的媒介中,如果你想让你的程序和其它的程序进行数据交换的话Content Provider是非常好用。content provider是一个类,它实现了一套标准的方法集,用来让其它程序存储和恢复数据,这些数据用来和他们(其他的程序)自己的content provider进行交换。更多的内容请看:

http://code.google.com/android/devel/data/contentproviders.html
分享到:
评论

相关推荐

    Android Studio 3.2 Development Essentials, Kotlin Edition

    10. The Anatomy of an Android Application 11. An Introduction to Kotlin 12. Kotin Data Types, VariablesandNullablty 1A katHnHwCaLCd 15. An Overview of Kotin Functions andLambdas 16. The Basics of ...

    Learning Android: Develop Mobile Apps Using Java and Eclipse(第二版)

    Anatomy of an Android Project Drawable Resources Building the Project Android Emulator Summary Chapter 5 Main Building Blocks A Real-World Example Activities Intents Services Content Providers ...

    如何学习android

    2. **剖析Android应用结构**:通过阅读《Anatomy of an Android Application》了解一个典型Android应用的组成部分及其工作原理。 3. **熟悉开发工具**:掌握Development Tools文档,了解Android Studio等工具的使用...

    android 资料大集合

    2. **Anatomy+of+an+Android+Application+-+Android.mht**:这个文件可能是Android应用程序结构的分析,它可能会深入讲解Android应用程序的组件(Activity、Service、BroadcastReceiver、ContentProvider)如何协作...

    Android合集(初学者必看)

    例如,`Anatomy+of+an+Android+Application+-+Android.mht`可能解析了Android应用程序的架构,包括组件(如活动、服务、广播接收器和内容提供者)、进程和线程模型,以及应用程序间通信(IPC)。而`pem_ss08_lecture...

Global site tag (gtag.js) - Google Analytics