簡明易懂的Android代碼解說
Android作為一個手機操作系統(tǒng),大多數(shù)的人都是把它默認(rèn)為面向?qū)ο蟮闹С郑J(rèn)為他就是塞班的替代品,一種延伸而已,而事際上,Android代碼與塞班是完全不同的操作系統(tǒng)。
雖然Intent Receiver在感興趣的事件發(fā)生時,會使用NotificationManager通知用戶,但它并不能生成一個UI。ntent Receiver在AndroidManifest.xml中注冊,但也可以在Android代碼中使用Context.registerReceiver()進行注冊。
當(dāng)一個intent receiver被觸發(fā)時,你的應(yīng)用不必對請求調(diào)用intent receiver,系統(tǒng)會在需要的時候啟動你的應(yīng)用。各種應(yīng)用還可以通過使用Context.broadcastIntent()將它們自己的intent receiver廣播給其它應(yīng)用程序。
一個Service是一段長生命周期的,沒有用戶界面的程序。比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應(yīng)用中,應(yīng)該會有多個activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個功能并沒有對應(yīng)的activity。#t#
因為使用者當(dāng)然會認(rèn)為在導(dǎo)航到其它屏幕時音樂應(yīng)該還在播放的。在這個例子中,媒體播放器這個activity會使用Context.startService()來啟動一個service。從而可以在后臺保持音樂的播放。同時,系統(tǒng)也將保持這個service一直執(zhí)行,直到這個service運行結(jié)束。另外,我們還可以通過使用Context.bindService()方法。
連接到一個service上(如果這個service還沒有運行將啟動它)。當(dāng)連接到一個service之后,我們還可以service提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。
應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件中、SQL數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時。Content Provider將會很有用。一個Content Provider類實現(xiàn)了一組標(biāo)準(zhǔn)的方法,從而能夠讓其它的應(yīng)用保存或讀取此Content Provider處理的各種數(shù)據(jù)類型。
在一個Android應(yīng)用中,主要是由一些組件組成,(Activity,Service,ContentProvider,etc.)在這些組件之間的通訊中,由Intent協(xié)助完成。正如網(wǎng)上一些人解析所說,Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進行描述,Android則根據(jù)此Intent的描述。
負(fù)責(zé)找到對應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent在這里起著實現(xiàn)調(diào)用者與被調(diào)用者之間的解耦作用。Intent傳遞過程中,要找到目標(biāo)消費者(另一個Activity,IntentReceiver或Service),也就是Intent的響應(yīng)者,有兩種方法來匹配:
- public TestB extents Activity
- {
- .........
- };
- public class Test extends Activity
- {
- ......
- public void switchActivity()
- {
- Intent i = new Intent(Test.this, TestB.class);
- this.startActivity(i);
- }
- }
Android代碼簡潔明了,執(zhí)行了switchActivity()函數(shù),就會馬上跳轉(zhuǎn)到名為TestB的Activity中。