首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評測 / 活動(dòng)區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 13543|回復(fù): 0
上一主題 下一主題
[教程]

《Android Dev Guide》系列教程3:應(yīng)用基礎(chǔ)之組件篇2

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
>
激活組件: intents
當(dāng)ContentResolver接收到一個(gè)請求時(shí),運(yùn)行content providers。其他三個(gè)組件activities、services、broadcast receiver被Intents異步消息啟動(dòng)。intent 里包含著所傳遞消息的內(nèi)容。對于activity和services來說,intents定義了請求,指定了目標(biāo)數(shù)據(jù)的URI。例如,可以讓發(fā)送一個(gè)請求讓用戶接受或者輸入一些文本信息。對broadcast receivers來說,intents定義了一些聲明的事件(?),例如:他可以在相機(jī)的按鈕被按下時(shí)發(fā)出一些信息。
下面是每個(gè)組件類型對應(yīng)的啟動(dòng)方法
@ Context.startActivity() 和 Activity.startActivityForResult()方法可以啟動(dòng)一個(gè)activity。activity可以查看啟動(dòng)他的的intent,通過調(diào)用getIntent()方法。Android 系統(tǒng)調(diào)用onNewIntent()方法來傳遞intents。
一個(gè)activity經(jīng)常會(huì)啟動(dòng)下一個(gè)activity。使用startActivityForResult() 代替 startActivity()方法可以從啟動(dòng)的activity獲取一些返回值。例如,可以啟動(dòng)一個(gè)activity讓用戶選擇一張圖片并且返回所選的圖片,被傳遞回來的數(shù)據(jù)被送到前一個(gè)activity的onActivityResult()方法里。
@ Context.startService()可已啟動(dòng)一個(gè)service。Android通過service的onStart()方法傳遞intent對象。類似的,intent可以傳遞至Context.bindService()來獲取一個(gè)正在運(yùn)行的服務(wù)的句柄,這個(gè)服務(wù)可通過onBind()方法獲取這個(gè)intent對象(如果服務(wù)沒有啟動(dòng)可以通過bindService()來啟動(dòng)服務(wù))。例如,一個(gè)activity可以很容易的建立一個(gè)到音樂播放服務(wù)的連接,他可以提供給用戶一些控制音樂播放器的借口。activity可以調(diào)用bindService()方法來建立連接,然后調(diào)用已經(jīng)定義的關(guān)于播放器的一些方法。
@ 應(yīng)用程序可以通過傳遞intent來初始化一個(gè)Broadcast廣播,相關(guān)方法:Context.sendBroadcast()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast() ,activity會(huì)調(diào)用所有對此廣播關(guān)注的廣播接收器,然后將intent傳遞給這些方法。
關(guān)閉組件
只有當(dāng)內(nèi)容提供商從內(nèi)容接收者接收到一個(gè)請求時(shí)才會(huì)啟動(dòng)。廣播消息接受者只有當(dāng)接收到一個(gè)廣播消息時(shí)才會(huì)被啟動(dòng)。所以他們不需要手動(dòng)關(guān)閉。
activity則另當(dāng)別論,他們提供給用戶界面,他們和用戶保持長時(shí)間的對話并且保持活躍狀態(tài),甚至空閑時(shí),仍然保持聯(lián)系。類似的,services也會(huì)運(yùn)行很長一段時(shí)間。所以Android提供關(guān)閉activity和services的一些方法:
@ finish()會(huì)關(guān)閉activity,那些被startActivityForResult()方法啟動(dòng)的activity可以通過finishActivity()關(guān)閉。
@ services 可以通過 stopSelf()和Context.stopService() 方法被關(guān)閉。
當(dāng)系統(tǒng)不再使用他們或者沒有足夠內(nèi)存世,系統(tǒng)可以自行關(guān)閉一些組件,后面的章節(jié)會(huì)討論這種情況。
manifest 文件
在Android啟動(dòng)一個(gè)應(yīng)用組件前,必須讓activity知道那些組件的存在,所以應(yīng)用程序必須在manifest文件里聲明自己的組件,并把manifest文件打包到Android 包里。apk文件包含程序的代碼、文件和資源。
manifest是一個(gè)結(jié)構(gòu)化的xml文件,被命名為AndroidManifest.xml,里面聲明了應(yīng)用的組件、一些除了系統(tǒng)默認(rèn)庫的用戶自定義庫和程序希望被授予的一些權(quán)限。
manifest主要任務(wù)是告訴Android應(yīng)用程序的部件。例如,activity可以這樣聲明:
   
  1. view plaincopy to clipboardprint?   
    <?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>
復(fù)制代碼
<activity>元素的name屬性是繼承自activity基類的activity的類名,icon和label指向了資源文件。別的組件聲明起來就簡單的多了。服務(wù)的標(biāo)簽:<service>,廣播接受者標(biāo)簽:<receiver>,內(nèi)容提供商標(biāo)簽:<provider>。activity、services和內(nèi)容提供商不在這里聲明的話是不能運(yùn)行的。然而,廣播可以在manifest文件里聲明或者動(dòng)態(tài)的在代碼里創(chuàng)建并且調(diào)用Context.registerReceiver()方法聲明。Intent filtersIntent對象可以顯示的定義一個(gè)目標(biāo)組件。那樣的話,Android就可以找到并運(yùn)行它。如果目標(biāo)組件沒有明確的定義出來,Android會(huì)相應(yīng)最佳的組件來響應(yīng)這個(gè)Intent,這是通過比較<intent filters>標(biāo)簽里的所有組件來選擇相應(yīng)的。intent filters (Intent過濾器)告訴Android所有可以處理的組件。和組件的其他重要信息一樣,在manifest文件里聲明。下面是一個(gè)添加了兩個(gè)Intents過濾器的例子:   
  1. view plaincopy to clipboardprint?   
    <?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>
復(fù)制代碼
例子中的第一個(gè)過濾器是常見的。他標(biāo)記了所有顯示給用戶讓用戶選擇啟動(dòng)的組件。換句話說就是程序的入口點(diǎn)。是用戶啟動(dòng)程序后最先見到的。第二個(gè)過濾器聲明了可以提供(perform)的特殊數(shù)據(jù)類型。(對否?呵呵)一個(gè)組件可以有數(shù)個(gè)Intent過濾器。每一個(gè)都可以聲明不同的權(quán)限。如果沒有添加過濾器的話,只能使用Intent方式被啟動(dòng)。對于廣播接受者來說,如果在代碼中被創(chuàng)建和注冊,那么直接被實(shí)例化成一個(gè)IntentFilters對象,其他的過濾器都在manifest文件里被聲明。   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

上一篇:《Android Dev Guide》系列教程5:Android進(jìn)程和線程
下一篇:《Android Dev Guide》系列教程1:什么是Android?
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-28 00:55 , Processed in 0.066156 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表