<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冰浪

    哥已不再年輕 - 堅(jiān)定夢(mèng)想,畢生追求!
    posts - 85, comments - 90, trackbacks - 0, articles - 3
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Activity和Task是Android Application Framework架構(gòu)中最基礎(chǔ)的應(yīng)用,開(kāi)發(fā)者必須清楚它們的用法和一些開(kāi)發(fā)技巧。本文用大量的篇幅并通過(guò)引用實(shí)例的方式一步步深入全面講解它們的基礎(chǔ)原理(underlying principles)和架構(gòu)(mechanisms),例如:Navigation、Multitasking、activity re-use、intents和activity stack等…大部分與其相關(guān)的應(yīng)用模塊。重點(diǎn)講解開(kāi)發(fā)過(guò)程中如何更準(zhǔn)確的體現(xiàn)用戶交互性的便捷和高效,同時(shí)也幫助分析Designers和Developers在開(kāi)發(fā)期間所要面對(duì)的問(wèn)題。

    文中涉及到的實(shí)例有一部分是屬于平臺(tái)自帶的application(例如:撥號(hào)程序等),另外也有Google產(chǎn)品線中的一些有代表性的應(yīng)用(例如:Google Map等)。建議大家親自利用Emulator或者Android-powered device測(cè)試實(shí)例中的效果,這樣可以幫助更加清晰的理解一些模塊的含義。(注意:可能會(huì)因?yàn)橛布?duì)于某些功能無(wú)法提供支持,所以有一些實(shí)例可能無(wú)法在你的測(cè)試機(jī)中正常瀏覽)

    Space

    首先需要清楚一些基礎(chǔ)模塊:

    以上這四個(gè)模塊對(duì)于理解這篇文章非常重要,下邊就來(lái)逐一的簡(jiǎn)單介紹其具體的含義和用法(也可以通過(guò)其鏈接直接查看官方文檔)。

    Applications

    任何一個(gè)Android Application基本上是由一些Activities組成,當(dāng)用戶與應(yīng)用程序交互時(shí)其所包含的部分Activities具有緊密的邏輯關(guān)系,或者各自獨(dú)立處理不同的響應(yīng)。這些Activities捆綁在一起成為了一個(gè)處理特定需求的Application, 并且以“.apk”作為后綴名存在于文件系統(tǒng)中。Android平臺(tái)默認(rèn)下的應(yīng)用程序 例如:Email、Calendar、Browser、Maps、Text Message、Contacts、Camera和Dialer等都是一個(gè)個(gè)獨(dú)立的Apps。

    Activities

    上邊已經(jīng)提到Activities是構(gòu)成Applications的主要組成部分,其實(shí)可以更為具體的理解為Application僅僅是一個(gè)抽象的標(biāo)簽,它將系統(tǒng)內(nèi)一部分Activities關(guān)聯(lián)在一起,協(xié)同完成用戶的特定需求。安裝Application的過(guò)程也可以簡(jiǎn)單理解為將其所包裹的Activities導(dǎo)入到當(dāng)前的系統(tǒng)中,如果系統(tǒng)中已經(jīng)存在了相同的Activities,那么將會(huì)自動(dòng)將其關(guān)聯(lián),而不會(huì)重復(fù)安裝相同的Activities,避免資源的浪費(fèi)。Application卸載的過(guò)程也會(huì)檢查當(dāng)前所關(guān)聯(lián)的Activities是否有被其它Application標(biāo)簽所關(guān)聯(lián),如果僅僅是提供當(dāng)前的Application使用,那么將會(huì)徹底被移除,相反則不做任何操作。

    用戶與Application的交互行為大部分都是通過(guò)GUI來(lái)完成,在Android平臺(tái)可以有兩種方式定義GUI,其中可以利用XML來(lái)預(yù)置靜態(tài)的GUI元素,或者在Activity類的內(nèi)部動(dòng)態(tài)定義GUI元素。這兩種不同的方法都是由Activity作為驅(qū)動(dòng)和響應(yīng)用戶交互事件的主體。當(dāng)啟動(dòng)Application之后,至少需要一個(gè)包含有GUI信息的Activity實(shí)例被創(chuàng)建。

    Activity的主體包括兩個(gè)主要部分,其中一個(gè)是Content(data),另外一個(gè)是響應(yīng)用戶交互事件的行為。列舉一個(gè)Dialer例子的截圖,其中包括四個(gè)部分:Dialer主界面、通訊錄、查看聯(lián)系人信息和添加新聯(lián)系人。

    Dialer Activity Contacts list Contact View Add New Contact

    下面列舉了更多比較有代表性的Applications和其所包含的Activities:

    • Email – activities to view folders, view list of messages, view a message, compose a message, and set up an account
    • Calendar – activities to view day, view week, view month, view agenda, edit an event, edit preferences, and view an alert
    • Camera – activities for running the camera, viewing the list of pictures, viewing a picture, cropping a picture, running the camcorder, viewing the list of movies, and viewing a movie
    • Game – one activity to play the game, typically another for setup
    • Maps – one activity to view a location on a map, a second for lists (such as turn list or friend list), and a third for details (friend location, status, photo)

    Application基本上是由四個(gè)模塊組成:Activity、Service、Content Provider 和 Broadcast Receiver,其中Activity是實(shí)現(xiàn)應(yīng)用的主體。

    Activity Stack

    操作應(yīng)用程序時(shí),有時(shí)需要調(diào)用多個(gè)Activities來(lái)完成需求,例如:發(fā)送郵件程序,首先是進(jìn)入郵件主界面,然后啟動(dòng)一個(gè)新的Activity用于填寫新郵件內(nèi)容,同時(shí)可以調(diào)出聯(lián)系人列表用于插入收件人信息等等。在這個(gè)操作過(guò)程中Android平臺(tái)有一個(gè)專門用于管理Activities堆棧的機(jī)制,其可以方便的線性記錄Activities實(shí)例,當(dāng)完成某個(gè)操作時(shí),可以通過(guò)這個(gè)導(dǎo)航功能返回之前的Activity(通過(guò)按操作臺(tái)的“Back”)。

    每次啟動(dòng)新的Activity都將被添加到Activity Stack。用戶可以方便的返回上一個(gè)Activity直到Home Screen,到達(dá)Home Screen后,將無(wú)法再繼續(xù)查看堆棧記錄(俗話說(shuō):到頭了- Androidres.com)。如果當(dāng)前Task被中止(Interrupting the task),返回到系統(tǒng)主界面后啟動(dòng)了其它操作,當(dāng)希望返回到前一個(gè)Task繼續(xù)執(zhí)行時(shí),只需要再次通過(guò)主界面的Application launcher或者快捷方式啟動(dòng)這個(gè)Task的Root Activity便可返回其中止時(shí)的狀態(tài)繼續(xù)執(zhí)行。

    相對(duì)于Views、Windows、Menus和Dialogs而言,Activity是唯一可被記錄在History stack中的數(shù)據(jù),所以當(dāng)你所設(shè)計(jì)的應(yīng)用程序需要用戶由A界面進(jìn)入到次一級(jí)界面B,當(dāng)完成操作后需要再次返回A,那么必須考慮將A看作為Activity,否則將無(wú)法從歷史堆棧中返回。

    Tasks

    在Android平臺(tái)上可以將Task簡(jiǎn)單的理解為由多個(gè)Activities共同協(xié)作完成某一項(xiàng)應(yīng)用,而不管Activities具體屬于哪個(gè)Application。通過(guò)下邊的圖示可以更清晰的理解Applications、Tasks、Activities三者之間的關(guān)系 (Androidres.com提供):

    activities_tasks_guideline

    Activities可以被看作為是獨(dú)立存在于系統(tǒng)資源中,而且是作為實(shí)現(xiàn)具體應(yīng)用的主體,Task將一些Activity關(guān)聯(lián)起來(lái)實(shí)現(xiàn)一個(gè)更復(fù)雜的應(yīng)用,單獨(dú)或者多個(gè)Tasks可以被定義為一個(gè)Application。

    通常實(shí)現(xiàn)一個(gè)Task都會(huì)存在一個(gè)Root Activity,但并不是所有情況都如此,通過(guò)Application launcher、Home screen 的快捷方式或者 由 “Recent Tasks”(長(zhǎng)時(shí)間按住Home鍵) 最近使用過(guò)的Task記錄中啟動(dòng)。當(dāng)從一個(gè)Activity中啟動(dòng)另外一個(gè)Activity時(shí),Back鍵將作用于返回前一個(gè)Activity,與此同時(shí)新開(kāi)啟的Activity將被添加到Activity Stack中。

    這里有兩個(gè)被表示為Task的例子:

    • 發(fā)送帶有附件的郵件
    • 查看YouTube視頻,并且通過(guò)Email的方式共享給其他聯(lián)系人。

    - Interrupting the Task

    這是Task一個(gè)非常重要的特性,用戶可以實(shí)時(shí)中止當(dāng)前為完成的Task,新開(kāi)啟一個(gè)不同的Task,當(dāng)新Task完成操作后,依然可以返回當(dāng)上一次中止的Task繼續(xù)完成余下操作。這個(gè)特性大大方便了同時(shí)運(yùn)行多個(gè)Tasks,并且可以方便的在他們之間切換。這里有兩種方式可以從當(dāng)前Task跳轉(zhuǎn)為其它Task(應(yīng)用這兩種方式切換Task,都允許返回到Task最初中止前的狀態(tài))。

    • 系統(tǒng)拋出一個(gè)Notification,當(dāng)前Task會(huì)被終止,跳轉(zhuǎn)為Notification的Task。
    • 用戶強(qiáng)制中止

    當(dāng)然,除了這兩種方式以外,還有另外一個(gè)特殊情況,算作為第三種方式來(lái)啟動(dòng)一個(gè)新的Task:Activity本身被定義為一個(gè)Task。例如: Maps和Browser就是屬于第三種情況的Application,通過(guò)郵件中的一個(gè)地址來(lái)啟動(dòng)Maps Activity作為一個(gè)新的Task,或者通過(guò)郵件中的鏈接啟動(dòng)Browser來(lái)啟動(dòng)一個(gè)新的Task。當(dāng)處在這種情況下,Back按鍵被觸發(fā)后,將返回到上一個(gè)Task(郵件),因?yàn)檫@些新的Tasks并不是通過(guò)Home Screen中的Application launcher或者快捷方式來(lái)啟動(dòng)。

    Space

    了解Activities和Tasks的基本原理

    請(qǐng)大家一定首先理解之前所提及的內(nèi)容,如果對(duì)某些概念依然含混不清,請(qǐng)及時(shí)查閱更多資料(官方文檔是最好的學(xué)習(xí)資料),否則無(wú)法快速理解接下來(lái)將要講述的例子,甚至喪失閱讀興趣。

    接下來(lái),將通過(guò)一些有代表性的實(shí)例了解關(guān)于Applications、Activities、Activities stack、Tasks和Intent等一些模塊的最基本原理。從各個(gè)角度分析系統(tǒng)對(duì)于用戶在不同模式下操作的反應(yīng)原理。

    從Home啟動(dòng)一個(gè)Activity

    絕大部分的Application都由此啟動(dòng)(也有一些Application是通過(guò)其它Application啟動(dòng))。具體的方式有兩種,其一是從系統(tǒng)的Application Launcher啟動(dòng),另一種是直接由Home Screen的快捷方式。啟動(dòng)Application后,Root Activity會(huì)顯示在當(dāng)前窗口,并可直接供用戶操作界面元素。官方給出了一個(gè)有關(guān)這個(gè)過(guò)程的圖示,其實(shí)我感覺(jué)這個(gè)描述的還不夠直觀,湊合著用吧。大體的過(guò)程是由Home下啟動(dòng)Email Application,在這個(gè)應(yīng)用程序中可以直接提供給用戶操作的是List Messages Activity,Home Activity切換為后臺(tái)運(yùn)行。

    hometaskbasics1a

    應(yīng)用Back或Home鍵離開(kāi)當(dāng)前Activity的區(qū)別

    應(yīng)用Back或者Home都可以離開(kāi)當(dāng)前Activity(基于Application的Root Activity),Home activity重新切換到foreground,然而二者最根本的區(qū)別在于用戶是否還需要保留當(dāng)前Activity的state。

    - Back:

    將會(huì)終止(Destroy)當(dāng)前正在運(yùn)行的Activity,返回到之前的Activity(如果是 Root Activity,那么將會(huì)直接返回到Home Activity)。官方給出了一個(gè)相關(guān)過(guò)程的圖示,當(dāng)用戶正在操作List Messages Activity時(shí),下拉郵件列表(改變了Scrolling狀態(tài)),通過(guò)Back鍵返回到Home Activity之后,當(dāng)再次通過(guò)Email Icon啟動(dòng) List Messages Activity時(shí),將會(huì)看到列表處在初始位置。通過(guò)這個(gè)演示可以了解到通過(guò)Back鍵離開(kāi)當(dāng)前Activity時(shí),無(wú)法暫時(shí)保留住其State數(shù)據(jù),當(dāng)再次啟動(dòng)時(shí)相當(dāng)于重新創(chuàng)建了一個(gè)實(shí)例。

    hometaskbasics1b

    -Home:

    利用Home取代Back返回的方式,當(dāng)前Activity將被切換到Background,而不是被Destroied。這樣的好吃是可以暫時(shí)保留這個(gè)Activity的State信息,當(dāng)再次通過(guò)Application launcher或者快捷方式啟動(dòng)時(shí),可以返回到最后離開(kāi)的狀態(tài)。對(duì)比在Back中引用的例子,當(dāng)再次由Home返回到Activity時(shí),將會(huì)看到最后一次操作所記錄的Scroll狀態(tài),而不是默認(rèn)的初始位置。

    hometaskbasics1c

    Exception(例外情況)

    前邊列舉了兩種典型的情況,同時(shí)還存在一些例外的情況,某些Activity從Background被“召喚”到foreground之后依然是相當(dāng)于重新創(chuàng)建了新實(shí)例,其有區(qū)別于前邊所論述的結(jié)果。即便是暫時(shí)保存在Background模式下(沒(méi)有被Destroied),其State數(shù)據(jù)也將丟失。例如:Contacts 和 Gallery 等。當(dāng)用戶啟動(dòng)了Contact應(yīng)用程序,并點(diǎn)選某個(gè)條目查看詳細(xì)信息,如果通過(guò)Home鍵返回后,再次重復(fù)啟動(dòng)Contact應(yīng)用程序時(shí),看到的并不是之前所打開(kāi)的特定條目的詳細(xì)信息,而是初始的默認(rèn)界面。這個(gè)例子說(shuō)明不是所有情況下通過(guò)Home鍵返回后都可以保存當(dāng)前Activity的State信息。

    另外一種是與Back鍵有關(guān)的特殊情況。前邊提及到大部分的Activity通過(guò)Back鍵返回到Home Activity時(shí),其自身將被徹底銷毀,默認(rèn)情況下Activity響應(yīng)Back按鍵的方法被定義了Destroy行為。但對(duì)于某些特別情況,開(kāi)發(fā)者可以根據(jù)需求將相應(yīng)Back按鍵事件的行為重新“override”,撤消默認(rèn)的Destroy行為。音樂(lè)播放器是與其相關(guān)的一個(gè)典型應(yīng)用,當(dāng)用戶在播放器的Root Activity中觸發(fā)Back按鍵后,轉(zhuǎn)為Background模式下繼續(xù)播放當(dāng)前的音樂(lè),同時(shí)Home Activity轉(zhuǎn)為Foreground。

    Activity的復(fù)用

    在多個(gè)不同的Applications中,當(dāng)遇到有相同目的應(yīng)用時(shí),會(huì)涉及到Activity的復(fù)用性問(wèn)題,這在開(kāi)發(fā)過(guò)程中是一個(gè)非常普遍的情況。復(fù)用性一直被眾多開(kāi)發(fā)機(jī)構(gòu)強(qiáng)調(diào)為節(jié)約成本,優(yōu)化資源的最有效的機(jī)制。對(duì)于移動(dòng)應(yīng)用平臺(tái)更加看重資源的最優(yōu)化利用,復(fù)用性的應(yīng)用在Android平臺(tái)上無(wú)處不在,通過(guò)兩個(gè)比較基礎(chǔ)的例子來(lái)具體的說(shuō)明。

    - Contacts利用Gallery獲得圖像資源

    眾所周知Contacts是手機(jī)中最常用的應(yīng)用程序,主要用于存儲(chǔ)當(dāng)前用戶的聯(lián)系人信息,其中需要包含聯(lián)系人的頭像信息。在Android平臺(tái)中的圖像信息是由Gallery管理,所以Contacts必然需要復(fù)用Gallery Activity來(lái)獲取相應(yīng)的圖像信息。

    針對(duì)于Android或者其它平臺(tái)開(kāi)發(fā)應(yīng)用程序都需要有良好的復(fù)用性意識(shí),這個(gè)需要貫穿于項(xiàng)目的整個(gè)開(kāi)發(fā)過(guò)程。包括如何利用當(dāng)前系統(tǒng)的現(xiàn)有資源,或者考慮到將來(lái)可能會(huì)被其它應(yīng)用程序用于完成特定的需求。當(dāng)用戶正在調(diào)用的Intent filter不唯一時(shí),系統(tǒng)將彈出一個(gè)供用戶選擇的對(duì)話框,這的確是一個(gè)完美的解決方法。

    reusinganactivity1

    - 利用Messaging擴(kuò)展Gallery共享功能

    用戶通過(guò)Gallery查看當(dāng)前系統(tǒng)中的圖像資源,每次單獨(dú)打開(kāi)一幅圖像資源都可以通過(guò)Menu -> Share將當(dāng)前的資源以附件形式插入新創(chuàng)建的Messaging中,并且以正常發(fā)送信息的方式將其共享給收件人。如果取消當(dāng)前的共享行為,只需要通過(guò)Back按鍵返回到Gallery Activity。相比較前一個(gè)例子的區(qū)別在于,Message Activity完成發(fā)送或者被取消操作,其不會(huì)返回任何信息。

    reusinganactivity2

    以上兩個(gè)例子分別講解了利用一系列的Activities來(lái)完成某一項(xiàng)需求,并且它們都調(diào)用了外部的Application資源。

    Replacing an Activity

    目前要介紹的內(nèi)容是關(guān)于在不同的Applications中,有相同Intent filter屬性的Activities可相互間替換,這對(duì)于習(xí)慣Windows等操作系統(tǒng)的用戶比較不容易理解。其實(shí)如果您足夠細(xì)心,就可以發(fā)現(xiàn)之前的例子中有關(guān)于這里所提及情況。

    通常遇到這種情況發(fā)生時(shí),一般都是因?yàn)橥獠烤哂邢嗤δ艿腁ctivity A 在處理問(wèn)題的能力方面要優(yōu)于當(dāng)前Application中默認(rèn)的操作行為Activity B,系統(tǒng)會(huì)拋出一個(gè)可供選擇的對(duì)話框,用戶根據(jù)主觀判斷來(lái)選擇最優(yōu)的方式處理當(dāng)前任務(wù)。通過(guò)一個(gè)比較容易理解的實(shí)例來(lái)說(shuō)明整個(gè)過(guò)程,建議“動(dòng)手能力強(qiáng)”的同學(xué)可以通過(guò)模擬器親自嘗試。

    例如:用戶在當(dāng)前系統(tǒng)下加載了最新的Phone Ringtone Activity,取名為Rings Extended。如果用戶通過(guò)Setting -> Sounds&Display -> Phone Ringtone 來(lái)設(shè)置當(dāng)前的鈴音屬性時(shí),將會(huì)彈出一個(gè)包含有系統(tǒng)默認(rèn)的Phone Ringtone Activity 和最新加載的Rings Extended兩種可供選擇的操作應(yīng)用,同時(shí)在對(duì)話框中還提供了一種可以直接啟動(dòng)系統(tǒng)默認(rèn)的操作方式選項(xiàng)。如果用戶選擇了Rings Extended,那么其將會(huì)被載入當(dāng)前的線程中替代原有的默認(rèn)操作行為,可以根據(jù)下面的圖示來(lái)增強(qiáng)理解。

    replacinganactivity

    多任務(wù)同時(shí)運(yùn)行(Multitasking)

    在之前的板塊有專門提到關(guān)于Home和Back兩種切換到Home Screen的方法和它們之間的差異性,這個(gè)章節(jié)將會(huì)重點(diǎn)涉及到系統(tǒng)可以同時(shí)處理多個(gè)實(shí)時(shí)運(yùn)行的任務(wù)。如果用戶正處于某個(gè)Application A開(kāi)啟狀態(tài)時(shí),通過(guò)Home按鍵切換回Home Activity的同時(shí)保留了此前Application A運(yùn)行的狀態(tài)信息,可以開(kāi)啟新程序的同時(shí),也可以再次將Application A切換回Foreground。

    接下來(lái)通過(guò)一個(gè)有關(guān)Map應(yīng)用的實(shí)例更加具體的了解其所涵蓋的過(guò)程。

    首先的起始階段分為三個(gè)步驟,

    第一步,由Application Launcher啟動(dòng)Map應(yīng)用程序,并且搜索一個(gè)具體的地理位置。假設(shè)當(dāng)前的網(wǎng)絡(luò)環(huán)境非常不理想,需要花費(fèi)一定的時(shí)間Download地圖數(shù)據(jù)。

    第二步,當(dāng)系統(tǒng)需要花費(fèi)較長(zhǎng)時(shí)間加載當(dāng)前地圖信息數(shù)據(jù)時(shí),保持當(dāng)前Activity的狀態(tài),返回Home Activity啟動(dòng)其它的Applicaton,地圖Activity切換到Background,而并不會(huì)中斷加載進(jìn)度(依然保持網(wǎng)絡(luò)連接)。

    注意:以上是Activity在默認(rèn)條件下的反應(yīng)行為,其切換為Background狀態(tài)后直接觸發(fā)onStop()事件,開(kāi)發(fā)者可以重新定義其方法。例如:強(qiáng)制Activity在轉(zhuǎn)為Background狀態(tài)下,終止網(wǎng)絡(luò)連接。

    第三步,當(dāng)前Map activity已經(jīng)切換到Background狀態(tài)下運(yùn)行,Home Activity切換到Foreground。這時(shí)用戶啟動(dòng)Calender activity,其將自動(dòng)轉(zhuǎn)為Foreground狀態(tài),同時(shí)獲得操作焦點(diǎn)。

    將以上三個(gè)步驟用圖示的方式表述:

    hometaskbasics1d

    最后,退出當(dāng)前Calender activity返回到Home,再次通過(guò)Maps圖標(biāo)將其處在Background狀態(tài)的實(shí)例切換到Foreground。

    hometaskbasics1e

    通過(guò)上邊的例子看出用戶通過(guò)Application Launcher同時(shí)運(yùn)行多個(gè)Tasks,代表系統(tǒng)具備多任務(wù)處理機(jī)制 – Running multiple tasks。

    啟動(dòng)Application的兩種不同方式

    每個(gè)App都需要提供至少一個(gè)Entry point(翻譯成“入口點(diǎn)”有點(diǎn)別扭,干脆保留原樣)供用戶或者系統(tǒng)調(diào)用其所關(guān)聯(lián)的Activities,Application launcher中的小圖標(biāo)就是每個(gè)單獨(dú)App的Entry Point。另外App也可以相互間通過(guò)Activity作為Entry Point來(lái)啟動(dòng),可以將App所包含的每個(gè)Activity看作為潛在的Entry point。

    系統(tǒng)中的Phone Application同樣具有兩個(gè)Entry Points:Contacts和Dialer。下邊的圖示中可以了解到用戶通過(guò)Application launcher啟動(dòng)Contacts Activity,選擇其中某一個(gè)聯(lián)系人之后,調(diào)用Dialer Activity撥打其所提供的電話號(hào)碼。

    phoneactivitiesdiagram

    Intents

    在現(xiàn)實(shí)世界中大家每時(shí)每刻都會(huì)與周圍的環(huán)境發(fā)生互動(dòng),這個(gè)互動(dòng)的過(guò)程首先要確定一種意識(shí),例如:感覺(jué)到口渴,需要水分補(bǔ)充。這種意識(shí)會(huì)引導(dǎo)自己以習(xí)慣的方式解決口渴問(wèn)題,采用的方式可以多種多樣,吃冰淇淋、喝水、嚼樹(shù)葉等。類似于口渴的意識(shí)形態(tài)被抽象為Intent,并將其看作是一種對(duì)象,這就是Android響應(yīng)“意識(shí)”的方式。

    在Android平臺(tái)上,用戶的操作行為是由各種不同的事件組成,系統(tǒng)會(huì)將每個(gè)事件都抽象為Intent對(duì)象,尋找解決這項(xiàng)需求的具體方法。抽象的Intent對(duì)象有兩種形式,第一種是“明確”的Intent(Explicit Intent),在初始化的時(shí)候已經(jīng)為這個(gè)Intent關(guān)聯(lián)了特定的Activity。第二種是“不明確”的Intent(Implicit Intent),代表這個(gè)Intent沒(méi)有明確關(guān)聯(lián)Activity,當(dāng)它被拋出后,系統(tǒng)在眾多Activities中根據(jù)Intent filter來(lái)尋找與其匹配的處理方法。如果存在多個(gè)結(jié)果,用戶可以根據(jù)需要選擇合適的處理方法。

    引用一個(gè)具體的例子,單擊一個(gè)mailto:info@androidres.com鏈接后,這個(gè)被拋出的Intent屬于 Implicit Intent ,系統(tǒng)抓取了解決這個(gè)Intent的結(jié)果,將所有的結(jié)果供用戶選擇(Gmail或者Email):

    intentsdiagram

    下邊給出更多系統(tǒng)默認(rèn)的Intent關(guān)聯(lián)列表:

    • View the list of contacts – resolves to a contact list viewer activity
    • View a particular contact – resolves to a contact viewer activity
    • Edit a particular contact – resolves to a contact editor activity
    • Send to a particular email – resolves to an email activity
    • Dial a phone number – resolves to a phone dialer activity
    • View the list of images – resolves to an image list viewer activity
    • View a particular image – resolves to an image viewer activity
    • Crop a particular image – resolves to an image cropper activity

    Intent對(duì)象包含兩個(gè)元素:

    1)Action :例如 查看、編輯、撥打電話、查看圖像資源等等。

    2)Data:提供給某種行為的具體數(shù)據(jù)。加工果汁飲料,需要提供水果(黑心店除外)。

    參照官網(wǎng)的解釋:Intent ClassIntent Filters

    Tasks相互間切換

    依然是應(yīng)用實(shí)例來(lái)說(shuō)明這個(gè)切換的過(guò)程。在這個(gè)例子中,用戶編輯一個(gè)短消息,并且插入圖像附件,但是在發(fā)送之前啟動(dòng)Calendar,隨后切換回短消息編輯界面,最后發(fā)送信息。

    1)啟動(dòng)第一個(gè)Task:Messaging App,Home > Messaging > New Message > Menu > Attach > Picture。插入圖片的步驟需要調(diào)用Gallery Activity,它是一個(gè)獨(dú)立的外部程序。

    hometaskswitching1a

    hometaskswitching1b

    hometaskswitching1c

    接下來(lái)啟動(dòng)另外一個(gè)Task,由于沒(méi)有直接從當(dāng)前的Activity運(yùn)行Calendar,所以需要切換到Home。

    2)啟動(dòng)另外一個(gè)Application(Calendar):Home > Calendar

    hometaskswitching2

    3)查看Calendar完成后,將Messaging由Background切換到Foreground模式,其中還包括了添加附件,并最終發(fā)送消息。

    hometaskswitching3

    至此,對(duì)于Android平臺(tái)中兩個(gè)比較核心元素: Activities和Tasks 的介紹基本告一段落,以后也許會(huì)有更多關(guān)于這方面的討論,希望得到您的關(guān)注。另外,有些朋友或許已經(jīng)看過(guò)官方的原文,而本站也再次有幸得到了您的通讀,如果在某些概念或者論述內(nèi)容上存在遺漏或者誤解,那么真誠(chéng)的希望能夠獲得指正和幫助。


    轉(zhuǎn)自:http://www.androidres.com/index.php/2009/06/12/android-activity-task-design/
    主站蜘蛛池模板: 一级毛片a女人刺激视频免费| 噜噜噜亚洲色成人网站∨| 四虎精品免费永久免费视频| 亚洲∧v久久久无码精品| 在线日韩日本国产亚洲| 国产精品亚洲w码日韩中文| 亚洲精品NV久久久久久久久久| 凹凸精品视频分类国产品免费| 亚欧色视频在线观看免费| 亚洲精华国产精华精华液网站| 亚洲精品午夜国产VA久久成人| 亚洲无人区一区二区三区| 国产片免费在线观看| 四虎1515hm免费国产| 亚洲国产成人五月综合网| 最新中文字幕免费视频| 精品熟女少妇a∨免费久久| 国产精品美女久久久免费 | 一区二区三区亚洲| 亚洲免费在线视频| 亚洲综合区小说区激情区| 国产精品亚洲精品日韩已方| 亚洲色无码专区在线观看| 亚洲午夜久久影院| 亚洲一区二区三区免费观看| 亚洲国产人成在线观看69网站| 亚洲精品成人久久| 中文有码亚洲制服av片| 美景之屋4在线未删减免费| 久久久久久久久久免免费精品| 大地资源在线资源免费观看| 日本特黄特色AAA大片免费| 亚洲av午夜电影在线观看| 亚洲国产美女视频| 亚洲欧美自偷自拍另类视| 亚洲人成777在线播放| 久久久久亚洲精品无码蜜桃| 久久夜色精品国产噜噜亚洲a| 九九免费久久这里有精品23 | 亚洲精品福利你懂| 亚洲欧洲日本精品|