亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android開發之應用程序基礎及組件(續)

系統 1934 0

成功屬于耐得住寂寞的人,你離成功又近了一步了。

引言

上篇 Android開發之應用程序基礎及組件 介紹了應用程序的基礎知識及Android的四個組件,本篇將介紹如何激活組關閉組件等。本文的主題如下:

  • 1、激活組件:意圖(Intents)
    • 1.1、活動(Activity)組件的激活
    • 1.2、服務(Service)組件的激活
    • 1.3、廣播接收者(Broadcast receiver)組件的激活
  • 2、關閉組件
  • 3、清單文件
  • 4、Intent過濾器

1、激活組件:意圖(Intents)

當接收到 ContentResolver 發出的請求后,內容提供者被激活。而其它三種組件——活動、服務和廣播接收者,被一種叫做 意圖( intent )的異步消息 激活。意圖是一個保存著消息內容的 Intent 對象。 對于活動和服務來說 ,Intent對象指明了請求的操作名稱以及作為操作對象的數據的URI和其它一些信息。例如,它可以傳遞對活動的一個請求,讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本。 而對于廣播接收者而言 ,Intent對象指明了廣播的行為。例如當照相按鈕被按下,它可以對所有感興趣的對象廣播。

對于每種組件來說,激活的方法是不同的。下面將分別介紹活動、服務、廣播接收者組件的激活方法。

1.1、活動(Activity)組件的激活

通過傳遞一個Intent對象至 Context.startActivity() Activity.startActivityForResult() 以載入(或指定新工作給)一個活動。相應的活動可以看到初始的意圖,這個意圖通過 getIntent() 方法來查看激活活動。Android調用活動的 onNewIntent() 方法傳遞任何后續的意圖。

一個活動經常啟動了下一個。如果它期望它所啟動的那個活動返回一個結果,它會調用 startActivityForResult() 而不是 startActivity() 。例如,如果它啟動了一個活動讓用戶挑選一張照片,它可能會返回被選中的照片。結果以一個Intent對象傳遞調用活動的 onActivityResult() 方法。

1.2、服務(Service)組件的激活

通過傳遞一個Intent對象至 Context.startService() 以啟動一個服務(或給予正在運行的服務以一個新的指令)。Android調用服務的 onStart() 方法并將Intent對象傳遞給它。

與此類似,一個Intent可以傳遞給 Context.bindService() 以在調用的組件和目標服務之間建立持續的連接。這個服務會在調用 onBind() 方法中接受這個Intent對象(如果服務尚未啟動, bindService() 會先啟動它)。例如,一個活動可以連接至前面講到的音樂播放服務,并提供給用戶一個可操作的(用戶界面)以對播放進行控制。這個活動可以調用 bindService() 來建立連接,然后調用服務中定義的對象來控制播放。

1.3、廣播接收者(Broadcast receiver)組件的激活

應用程序可以通過將Intent對象傳遞給

  • Context.sendBroadcast()
  • Context.sendOrderedBroadcast()
  • Context.sendStickyBroadcast()

及其它類似方法來產生一個廣播。Android會通過 onReceive() 方法將intent傳遞給所有對此廣播有興趣的廣播接收者。

2、關閉組件

內容提供者僅在響應 ContentResolver 提出請求的時候激活。而一個廣播接收者僅在響應廣播信息的時候激活。所以,沒有必要去顯式的關閉這些組件。

而活動則不同,它提供了用戶界面。與用戶進行會話,所以只要會話依然持續,哪怕對話進程空閑,它都會一直保持激活狀態。與此相似,服務也會在很長一段時間內保持運行。所以Android提供方法有序地關閉活動和服務。

  • 可以通過調用它的 finish() 方法來關閉一個活動。一個活動也可以通過調用 finishActivity() 方法來關閉另外一個活動(它用startActivityForResult() 啟動的)。
  • 服務可以通過調用它的 stopSelf() 方法來停止,或者調用 Context.stopService()

當組件不再被使用的時候或者Android必須要為更多活躍的組件回收內存時,組件也可能會被系統關閉。

3、清單(manifest)文件

當Android啟動一個應用程序組件之前,它必須知道那個組件是存在的。所以,應用程序會在一個清單(manifest)文件中聲明它的組件,這個文件會被打包到Android包中。這個.apk文件還將包括應用程序的代碼、文件以及其它資源。

這個清單文件是XML結構的文件,且所有的Android應用程序都把它叫做 AndroidManifest.xml 。為聲明一個應用程序組件,它還會做很多額外工作,比如指明應用程序所需鏈接到的庫的名稱(除了默認的Android庫之外)以及聲明應用程序期望獲得的各種權限。

但清單文件的主要功能仍然是向Android聲明應用程序的組件。舉例說明,一個活動可以如下聲明:

      
      
      
        AndroidManifest.xml
      
      
        
          <?
        
        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> 元素的 name 屬性指定了實現了這個活動的 Activity 類的子類, icon label 屬性指向了包含展示給用戶的此活動的圖標和標簽的資源文件。

其它組件也以類似的方法聲明—— <service> 元素用于聲明服務, <receiver> 元素用于聲明廣播接收者,而 <provider> 元素用于聲明內容提供者。清單文件中未進行聲明的活動、服務以及內容提供者將不為系統所見,從而也就不會被運行。然而,廣播接收者既可以在清單文件中聲明,也可以在代碼中動態的創建(作為 BroadcastReceiver 對象)且調用 Context.registerReceiver() 方式注冊到系統。

4、Intent過濾器

Intent對象可以顯式地指定目標組件。如果進行了這種指定,Android會找到這個組件(依據清單文件中的聲明)并激活它。但如果Intent沒有進行顯式的指定,Android就必須為它找到對于intent來說最合適的組件。 這個過程是通過比較Intent對象和所有可能對象的intent過濾器完成的 。組件的intent過濾器會告知Android它所能處理的intent類型。如同其它關于組件的必要信息一樣,它們在清單文件中進行聲明的。這里是上面示例的一個擴展,其中加入了針對活動的兩個intent過濾器聲明:

          
          
          
            AndroidManifest.xml
          
          
            
              <?
            
            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
            
            
              >
            
          
          

示例中的第一個過濾器——action:“android.intent.action.MAIN”和category:“android.intent.category.LAUNCHER”的組合,是常見的。它標記這個活動顯示在應用程序啟動器中,用戶在設備上看到的可啟動的應用程序列表。換句話說,這個活動是應用程序的入口,是用戶選擇運行這個應用程序后所見到的第一個活動。第二個過濾器聲明了這個活動針對特定類型的數據。

一個組件可以擁有任意數量的intent過濾器,每個聲明一系列不同的能力。如果它沒有包含任何過濾器,它將只能被顯式聲明了目標組件名稱的意圖激活。

對于廣播接收者,它在代碼中創建并注冊intent過濾器,直接作為IntentFilter的對象實例化。其它過濾器則在清單文件中設置。

?

如果您現在對這些概念還沒有完全理解,沒關系這里我僅是讓大家有個印象,知道這些概念或術語的存在,知道他們大概是做什么的。后面我還將陸續更詳細地到這些東西并結合一些實例,到時候您就會清楚地知道這些東西。

?

?

Android開發之應用程序基礎及組件(續)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎国产精品永久地址51 | 伊人久久综合热青草 | 国产综合另类小说色区色噜噜 | 国产目拍亚洲精品一区二区三区 | 国内精品一区二区2021在线 | 欧美成人精品福利在线视频 | 四虎海外在线永久免费看 | 久久在线免费观看 | jizz女人| 久久亚洲精品专区蓝色区 | 久久国产一片免费观看 | 亚洲伊人色一综合网 | 免费在线黄色网址 | 精品美女在线 | 四虎在线精品免费高清在线 | 四虎影院永久 | 在线观看亚洲精品国产 | 亚洲性片| 狠狠操狠狠操狠狠操 | 综合图色| 九月婷婷亚洲综合在线 | 日本特黄一级午夜剧场毛片 | 91九色视频无限观看免费 | 成人免费视频网 | 四虎影院免费在线 | 狠狠色丁香婷婷久久综合2021 | 免费观看国产精品 | 91福利刘玥国产在线观看 | 天天插天天射 | 色啦啦影院 | 性欧美高清videosex | 亚洲qingse中文字幕久久 | 亚洲日本人成网站在线观看 | 99久久国产综合精品网成人影院 | 日韩永久免费视频 | 玖玖在线精品 | 国产福利不卡 | 国产福利在线观看 | 欧美激情特级黄aa毛片 | 四虎sihu新版影院亚洲精品 | 天天操天天干视频 |