1. 程式人生 > >Android應用程式元件

Android應用程式元件

Android的一個核心特性就是一個應用程式可作為其他程式中的元素(那些允許這樣的程式提供)。例如,如果你的程式需要用滾動條顯示一些圖片,另一個程式已經開發出了合適的功能,並且可供其他程式使用,你就可以直接呼叫那個程式的功能,而不是自己再開發一個。你的程式不需要包含其他程式的程式碼或者連結到它。而是,當有需要的時候,簡單的啟動那個程式的一部分功能。      為了能夠實現這樣的功能,系統必須能夠當在需要應用程式中任何一部分的時候啟動它的程序,並且例項化那部分的Java物件。為此,不像大多數其他系統中的程式,Android程式不是隻有單一的進入點(例如,沒有main()函式)。而是,他們擁有系統例項化和執行必須的元件。有四種類型的元件:

Activities   Activity為使用者提供了一個可視的使用者介面,例如,一個activity展示了一個使用者可以選擇的選單列表或顯示一些帶著標題的照片。一個簡訊程式可能有一個activity用來顯示可以傳送資訊的聯絡人,第二個activity用來向選中的聯絡人寫訊息,其他的activity用來檢視以前的訊息,或者更改設定。雖然它們通過聚合性很強的使用者介面工作者一起,但是每個activity都獨立於其他的。每一個都是 Activity 的子類。         一個應用程式可能只由一個activity組成,或者像剛才提到的短訊息程式,它由多個組成。什麼是activity,需要多少個,當然取決於應用程式和它的設計。典型的,當應用程式啟動的時候,activity中的一個要首先的顯示給使用者。從一個activity移動到另一個,是用過當前的activity啟動下一個來完成的。
        每個activity都有一個預設的視窗。一般的情況是,這個視窗填滿螢幕,但是他也可以小於螢幕和浮動到其他視窗的上面。activity也可以用作附加的視窗——例如,一個使用者呼叫的彈出式對話方塊,或者當用戶選擇螢幕上一個特殊的選項時一個視窗用來顯示一些重要的資訊。         視窗中的可視內容被一系列層次的檢視(view)提供——派生自View類的物件。每個檢視都控制了視窗中的 一個矩形區域。父檢視包含和組織子檢視的佈局。葉試圖(位於層次中的最底部)繪製在它控制的區域,直接響應這塊空間的使用者動作。這樣,檢視就是activity與使用者互動的地方。例如,當用戶觸動一個顯示小圖片的檢視時,會觸發一些動作。Android提供了很多現成的檢視供你使用——包括按鈕,文字框,滾動條,選單項,複選框還有更多。
        整個檢視層次通過Activity.setContentView() 方法放到activity的視窗上。 content view是檢視層次上的根節點。(更多檢視層次的資訊請看這個文件 User Interface )。 服務(Services)

     服務沒有視覺化的介面,但是可以無限的執行在後臺。例如,服務可以在後臺播放音樂同時使用者在做著其他的事情。或者他可以通過網路獲取資料或計算一些activity需要的東西。所有的服務都繼承自

      一個最好的例子是媒體播放器通過一個播放列表來播放歌曲。這個播放器程式或許有一個或多個activity,來允許使用者選擇音樂和播放它們。然而,音樂本身不能被activity處理,因為使用者希望當他們離開播放器視窗去做其他的事情時,音樂仍然能夠播放。為了讓音樂能夠繼續,媒體播放器的activity可以啟動一個在後臺執行的服務。系統應該保證音樂服務執行,即使啟動的activity視窗已經不再主螢幕上了。

     可以連線到(繫結到)進行中的服務(和開啟一個已經不再執行的服務)。當連線上的時候,你可以通過服務暴露的介面和它通訊。在音樂服務中,這個介面可以讓使用者暫停,重定位,停止,重新播放錄音。

     像activity和其他元件一樣,服務執行在應用程式程序的主執行緒中。所以它們不會阻塞其他元件或使用者介面,他們經常為那些比較花費時間的任務產生其他的執行緒(就像音樂),請看後面的程序和執行緒部分。 廣播接收器(Broadcast receivers)      廣播接收器不會主動做什麼事,但是他會接受廣播訊息並作出響應。許多廣播都來源於系統程式碼——例如,時區改變的通知,電池底電量,接受到一幅圖片,或者使用者改變了語言選項。應用程式也能傳送訊息——例如,讓其他的程式知道一些資料已經下載到裝置上並且可以使用。        應用程式能擁有任何數量的廣播接收器來響應任何訊息是很重要的。所有的接收器都整合BroadcastReceiver 類。        廣播接收器不會顯示使用者介面,但是它為了響應一個接受到的訊息可能會啟動一個activity,或者它會用   NotificationManager來提示使用者。通知訊息可以有多種方式吸引使用者的注意力——閃爍背光燈,振動手機,播放聲音,等等。他們一般會在狀態列一直放一個圖片,使用者可以開啟它獲得訊息。 內容提供器(Content providers)    內容提供器能讓把應用程式的資料提供給其他資料。這些資料可以是儲存在檔案系統中的,也可以是SQLite資料庫中的或者其他形式。內容提供器繼承自ContentProvider類,實現了一系列標準的方法來讓其他程式接受和儲存它控制之下的資料。但是,程式不會直接呼叫這些方法。而是用一個 ContentResolver 物件,呼叫它的方法。ContentResolver 可以和任何的內容提供器通訊。它和內容提供器一起來管理程序間通訊。        每當一個請求要被一個特定的元件處理的時候,Android保證這個元件的程序是在執行的,如果需要的話就啟動它,這個元件適當的例項是可用的,如果需要會建立這個例項。 觸發元件:行為(intents)       當被ContentResolver最為作為目標時內容提供器被啟用。另外三個元件——activity,服務和廣播接收器,被叫做行為(intents)的非同步訊息驅動。行為是一個存放著訊息內容的Intent物件。對於activity和服務,它命名請求的動作,指定要處理資料的URI。例如,它可能代表一個給使用者顯示圖片的請求,或者讓使用者編輯一些文字。對於廣播接收器,行為物件為將要傳送的訊息命名。例如,當攝像頭按鈕按下的時候,它會發送一些有用的資訊。         有各種方法用來觸發各類的元件:
  • 一個activity通過傳遞一個行為(intents)物件到 Context.startActivity()Activity.startActivityForResult()方法來啟動(或者有一些新的事情要做)。用來響應的activity可以呼叫它的 getIntent()方法來獲得觸發它啟動的那個行為(intents)。Android使用activity的的行為。
  • 一個服務的啟動(或者一個新的指令給正在執行的服務),是通過傳遞一個行為物件到 Context.startService()。Android呼叫服務的onStart()方法並傳遞一個行為物件給這個方法。
    同樣地,行為可以傳遞給 Context.bindService(),用來建立呼叫元件和目標服務之間的連線。服務通過onBind()方法的呼叫來接受行為物件。(如果服務還沒有執行,bindService()可以啟動它。)例如,一個activity可以和前面提到的音樂播放服務建立連線,因此它可以為使用者提供選單(一個使用者介面)來控制音樂播放。這個activity將呼叫bindService()來建立這個連線,然後呼叫服務中定義的方法來對音樂播放產生影響。
關閉元件       內容提供器僅在響應ContentResolver的請求的時候觸發。廣播接收器僅在響應廣播訊息的時候才有效。所以不必明確的關閉這些元件。         Activity,在另一方面,提供了使用者介面。它們在和使用者的較長時間的會話中一直都有效,甚至是空閒的時候,只要會話還在繼續。同樣地,服務也會執行較長的時間。所以Android有一些方法通過逐步的方式停止activity和服務:
  • Activity可以通過呼叫finish() 方法來停止。一個Activity可以通過呼叫 finishActivity() 方法停止另一個Activity(通過startActivityForResult()方法開啟的)。
   元件也可能被系統停止,當他們不再被使用或Android必須為更多的活動中的元件重新分配記憶體時。後面的一節,元件生命週期,更詳細的討論這個可能性和他的後果。 清單(manifest)檔案    在Android啟動一個元件之前,它必須能夠了解到這個元件的存在。因此,應用程式將它們的元件定義在Android包中的清單(manifest)檔案中,這個.apk檔案存放著程式的程式碼,檔案和資源。
   清單是一個結構化的XML文件,在所有的應用程式中它都以AndroidManifest.xml 命名。它在定義應用程式元件上面做了很多事。像是指定所有應用程式需要連結的庫(不包括Android預設的庫),還有指定應用程式期望被分配的一切許可權。      但是清單檔案的主要任務是通知Android關於應用程式元件的資訊。例如一個Activity可能會像下面這樣這樣定義:
<?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" 
                  . . .  >
        </activity>
        . . .
    </application>
</manifest>
      屬性為實現了Activity的子類命名。icon和label屬性表明了用來顯示給使用者的包含圖示和標籤的資原始檔。        其他的元件也用類似的方式定義—— <service>元素用來定義服務, <receiver>元素用來定義廣播接收器,還有 <provider>元素用來定義內容提供器 。Activity,服務和內容提供器沒有定義在清單檔案中的話,就不會再系統中可見,最後就不會被執行。但是廣播接收器既可以定義在清單檔案中,也可以在程式碼(BroadcastReceiver 物件)中動態建立,然後呼叫 行為過濾器(Intent filters)

     行為物件可以明確的指定一個目標元件。如果它這樣做,Android尋找(基於清單檔案中的定義)這個元件並觸發它。但是如果目標沒有明確的指定,Android必須找出一個最佳的元件來響應這個行為。它是通過比較行為物件和行為過濾器來找到可能的目標的。一個元件的行為過濾器通知Android那種型別的行為這個元件是能夠處理的。像其他元件必須的資訊一樣,它們定義在清單檔案中。這個是前面例子的一個擴充套件,為Activity新增兩個行為過濾器:

<?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:mimeType="image/jpeg" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        . . .
    </application>
</manifest>
     例子中的第一個過濾器——動作"android.intent.action.MAIN"和型別 "android.intent.category.LAUNCHER"的組合——很普遍應用的一個。它標誌著Activity應該在應用程式啟動時執行,那些在螢幕上列出來的使用者可以在裝置上啟動的程式。另一方面,這個Activity是應用程式的入口。這是使用者在載入器中選擇啟動一個應用程式後最先見到的那個。       第二個過濾器定義了應用程式可以執行在一個特定型別資料上的動作。
      元件可以有很多行為過濾器,每一個都定義了不同的能力。如果它沒有任何過濾器,那麼它只能被那些明確的將它設為目標的那些行為所觸發。
      對那些在程式碼中建立和註冊的廣播接收器來說,行為過濾器可以例項化成一個IntentFilter的物件。其他的過濾器都設定在清單檔案中。

相關推薦

Android應用程式元件Content Provider在應用程式之間共享資料的原理分析

                        在Android系統中,不同的應用程式是不能直接讀寫對方的資料檔案的,如果它們想共享資料的話,只能通過Content Provider元件來實現。那麼,Content Provider元件又是如何突破應用程式邊界許可權控制來實現在不同的應用程式之間共享資料的呢?

android應用程式元件概述

元件是一個Android程式至關重要的構建模組。每一個元件都是系統進入你的應用的不同途徑。但並不是所有的元件都是使用者進入程式的真實入口,其中一些要依賴於其它元件, 但是每一個元件都以自己獨有的形式存在,併發揮特殊的作用;每一個元件都是一個唯一的模組,幫助你實現

Android應用程式元件

Android的一個核心特性就是一個應用程式可作為其他程式中的元素(那些允許這樣的程式提供)。例如,如果你的程式需要用滾動條顯示一些圖片,另一個程式已經開發出了合適的功能,並且可供其他程式使用,你就可以直接呼叫那個程式的功能,而不是自己再開發一個。你的程式不需要包含其他程式

Android應用程式元件的啟動方式

Activity,通過傳遞一個Intent物件給startActivity()或者startActivityForResult()啟動,該Intent物件帶有“動作”和該動作作用到的“資料”。Service,同樣需要一個帶有“動作”和“資料”的Intent物件,啟動用startService(),繫結用bin

Android應用程式元件介紹

應用程式元件是Android應用程式的基本構建單元。每個元件是系統進入你的應用程式的不同入口點。不是所有的元件對於使用者都是實際上的入口點,有些是互相依賴的,但是每個元件都有特定的作用——每個都是唯一的構建單元,這些構建單元定義你應用程式的全部行為 有四種不同型別的應用程式元件。每種都有不同的用處並且有不

android四大元件android應用程式的組成)是什麼,功能分別是?

四大元件分別為activity、service、content provider、broadcast receiver。一、android四大元件詳解1、activity(1)一個Activity通常就是一個單獨的螢幕(視窗)。(2)Activity之間通過Intent進行通

Android 應用程式四大元件

開發十年,就只剩下這套架構體系了! >>>   

瀏覽器判別下載安裝/開啟Android應用程式

摘要: 通過手機瀏覽器直接開啟Android應用程式。 如果本地已經安裝了指定Android應用,就直接開啟它; 如果沒有安裝,則直接下載該應用的安裝檔案(也可以跳轉到下載頁面)。 之前寫過一篇blog,介紹如何通過點選手機瀏覽器中的連結,直接開啟本地Android App。 實現方式

Android應用程式框架講解

在我們的android的程式中會有很多的檔案,那麼這些檔案到底是有什麼作用呢? 我們編譯android專案,可以使用eclipse和AS,首先介紹一下eclipse中的框架 1、src檔案:存放的是應用程式使用到的java檔案 2、gen檔案:系統自動生成的目錄。不需要程式設計師進行

android應用程式的介面程式設計

要點 android的介面與view元件 view元件和viewgroup元件 android控制程式的三種方式 通過繼承view開發自定義view android常見的佈局管理器 文字框元件:textview和edittext 按鈕元件:button 特殊按鈕元件:radiobut

Android應用程式進行系統簽名

有時寫一個程式需要呼叫系統的庫,如果許可權不夠,是用不了庫裡面一些方法的 。這時就需要將apk進行系統簽名。  簡單常用的方法:                 1,在apk的AndroidMani

Android應用程式簽名打包(AS)

使用Android studio對Android應用簽名步驟: 第一步: 第二步: 第三步: 第四步: 數字證書建立完成後,點選OK----->點選Next------>Finish。 注意:生成後的數字證書千萬不能丟失,還有密碼也不能忘記了

怎麼獲取Android應用程式的上下文

前面我做了一個類似於騰訊QQ一樣的聊天應用,在這個應用裡面,有很多activity,而這些activity之間經常要進行互相啟動、往復跳轉、還有就是通過Notification啟動。當activity多了之後,如果設定他的模式為單例模式,或者不設定模式。在反覆啟動後會出現數據不同步、fc等各種未知的

Android 應用程式崩潰日誌捕捉

程式崩潰是應用迭代中不可避免的問題,即使有著5年或者10年經驗的程式猿也無法完全保證自己的程式碼沒有任何的bug導致崩潰,現在有一些第三方平臺可以幫助我們蒐集應用程式的崩潰,比如友盟,詳情如下圖 雖然能夠看到崩潰的日誌以及機型等,但還是不是很方便,如果需要精確定位的話需要使用者提供崩潰的時間點、機型

轉老羅 Android應用程式資源的查詢過程分析

原文地址  http://blog.csdn.net/luoshengyang/article/details/8806798   轉載請說明     我們知道,在Android系統中,每一個應用程式一般都會配置很多資源,用來適配不同密

轉自老羅 Android應用程式資源的編譯和打包過程分析

原文地址   http://blog.csdn.net/luoshengyang/article/details/8744683 轉載自老羅,轉載請說明   我們知道,在一個APK檔案中,除了有程式碼檔案之外,還有很多資原始檔。這些資原始檔是通過An

轉自 老羅 Android應用程式資源管理器(Asset Manager)的建立過程分析

原文地址在 http://blog.csdn.net/luoshengyang/article/details/8791064 原創老羅,轉載請說明     在前面一篇文章中,我們分析了Android應用程式資源的編譯和打包過程,最終得到的應用程式資源就與

模組化惡意Android應用程式偽裝成語音工具,通過調查收集PII資料

“這些惡意應用程式和惡意軟體的觀察變體自10月份開始逐一部署,其演變包括規避技術及其感染行為分為幾個階段,”趨勢科技在他們的分析中表示。 在嘗試通過虛假調查收集使用者的個人身份資訊(PII)並提供禮品卡作為獎勵以填寫它們時,已經觀察到被稱為AndroidOS_FraudBot.OPS的惡意軟體。此外,惡意應

android應用程式的混淆打包(轉)

target=android-8 proguard.config=proguard.cfg Eclipse會通過此配置在工程目錄生成proguard.cfg檔案  2 . 生成keystore (如已有可直接利用) 按照下面的命令列 在D:\Program 

android應用程式安裝後點擊開啟帶來的問題

前幾天專案組反饋回來一個這樣的情況就是我在安裝應用之後點選了開啟 然後按home鍵 這個時候應用程式進入後臺 我點選手機桌面的時候圖片啟動應用程式 程式重新再次啟動 而不是後臺的程式返回到前臺;  /