一个Android应用程序一般有下面4个组件组成:
Activity
Intent Receiver
Service
Content Provider
不是每个程序都有这4个,或许你的程序只运用了其间一部分。
一旦你决议程序包括哪些组件时,你得在AndroidManifest.xml文件中列出它们。这是个XML文件,它包括你程序所界说的组件,这些组件的功用和必备的条件。你可以拜访Android manifest在线文档取得此文件的详细描绘。
Activity
注:专有名词不翻。
Activities 是4个组件中最常用的。 程序中,Activity一般的表现形式是一个独自的界面(screen)。每个Aactivity都是一个独自的类,它扩展完结了Activity根底类。这个类显现为一个由Views组成的用户界面,并呼应工作。大多数程序有多个Activity。例如,一个文本信息程序有这么几个界面:显现联络人列表界面,写信息界面,检查信息界面或许设置界面等。每个界面都是一个Activity。切换到另一个界面便是载入一个新的Activity。某些情况下,一个Activity或许会给前一个Activity回来值——例如,一个让用户挑选相片的Activity会把挑选到的相片回来给其调用者。
翻开一个新界面后,前一个界面就被暂停,并放入前史栈中(界面切换前史栈)。运用者可以回溯前面现已翻开的寄存在前史栈中的界面。也可以从前史栈中删去没有界面价值的界面。Android在前史栈中保存程序运转发生的一切界面:从第一个界面,到最后一个。
Intent and Intent Filters
Android经过一个专门的Intent类来进行界面的切换。Intent描绘了程序想做什么(intent,n.目的, 目的, 意向)。数据结构的2个最重要的部分是操作(action)与依照既定规矩处理的数据(data)。典型的操作是MAIN (Activity的进口),VIEW,PICK,EDIT,等等。数据用URI表明。例如,检查或人的联络信息,你需求创立一个Intent,运用VIEW操作,数据则是一个指向此人的URI。
有个相关的类叫IntentFilter。Intent是一个恳求来做什么工作;IntentFilter则描绘了一个Activity(或下文的IntentReceiver)能处理什么目的。显现或人联络信息的Activity运用了一个IntentFilter,便是说它知道怎么处理应用到此人数据的VIEW操作。Activities在AndroidManifest.xml文件中运用IntentFilters。
经过解析Intents来完结Activity的切换。运用startActivity(myIntent)来启用新的Activity。体系调查一切装置程序的IntentFilters,然后找到与myIntent匹配最好的IntentFilters所对应的Activity。这个新Activity接到Intent传来的音讯,并因而被启用。解析Intents的进程发生在startActivity被实时调用时,这样做有2个优点:
Activities仅宣布一个Intent恳求,便能重用其他组件的功用
Activities 可以随时被替换为有等价IntentFilter的新Activity
Intent Receiver
当你想履行一些与外部工作相关的代码时,比方来电响铃时,数据网络可用时,或许深夜时做些工作,你或许需求运用IntentReceiver了。IntentReceivers没有UI,虽然它们运用NotificationManager来告诉用户一些好玩的工作发生了。IntentReceivers在AndroidManifest.xml文件中声明,不过你可以运用Context.registerReceiver()来声明。你的程序没有必要运转来等候IntentReceivers被调用。当一个IntentReceiver被触发时,怎么需求的话,体系自然会发动你的程序。程序也可以经过Context.broadcastIntent()来发送自己的Intent播送给其他程序。
Service
Service是一个没有UI且长驻体系的代码。最佳比如媒体播映器从播映列表中播映歌曲。媒体播映器程序中,或许有一个或多个Activities让用户挑选歌曲播映。但是,在后台播映歌曲就无需Activity干与了,由于用户期望在音乐播映一起可以切换到其他界面。已然这样,媒体播映器Activity需求经过Context.startService()发动一个Service,这个Service在后台运转以坚持持续播映音乐。在媒体播映器被封闭之前, 体系会坚持音乐后台播映Service的正常运转。(Life Cycle of an Android Application供给更多有关Service的信息。) 请注意,你可以用Context.bindService()办法衔接到一个Service上(假如Service未运转的话,衔接后,还会发动它)。衔接上后,你就可以经过一个Service供给的接口与Service进行通话。对音乐Service来说,则供给了暂停,重放等功用。
Content Provider
应用程序把数据寄存一个SQLite数据库格式文件里,或许寄存在其他有用设备里。假如你想让其他程序可以运用你自己程序的数据,Content Provider就很有用了。Content Provider是一个完结了一系列规范办法的类,这个类使得其他程序能存储、读取某种Content Provider可处理的数据。想得到更多关于Content Provider的信息,请检查Accessing Content Providers。