有關Android調用服務全解析

在Android裏面進行Android調用服務, intent filter 是一個默認的 IntentFilter 對象,其他所有的filters 必須在裝箱單中聲明。
進行Android調用服務時,你的程序只需要建立一個intent對象,這個intent對象包含請求的數據,並調用startActivity(),當前的acitivity被彈出棧,之前的activity成爲正在運行的。
被激活的activity可以通過調用 getIntent() 方法獲取激活它的intent。Android調用服務acitivity的onNewIntent() 方法來傳送其他後來的intent。(注:一個activity可以同時被多個intent激活)Activity經常會調用其他的activity,如果它需要被調用的activity返回的數據,可以調用startActivityForResult() 方法,而不是 startActivity()。
例如,某個activity調用另外一個activity用來讓用戶選擇一個圖片,另外一個activity應該返回用戶選擇的圖片。結果通過第一個activity的onActivityResult() 返回,返回的形式也是intent。service通過調用 Context.startService()被開始。Android調用服務的onStart() 方法,並把intent傳送給它。
類似的,intent可以通過 Context.bindService() 方法建立同正在運行的服務的聯繫。服務通過onBind() 方法獲取intent。如果服務沒有啓動, bindService() 方法可以選擇是否啓動服務。例如,一個activity可能會想建立與後臺播放音樂的服務的通信。
這樣用戶就可以通過activity控制後臺的播放。因此activity可能會調用 bindService() 方法來建立連接,然後再調用service公開的接口。程序可以調用Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和Context.sendStickyBroadcast()來傳遞intent初始化一個broadcast。broadcast 通過 onReceive() 方法接收。
在Android開始一個應用程序之前,它必須知道有哪些文件,因此程序必須在一個manifest文件中聲明所有用到的組件。這些聲明的組件會被編譯到apk文件中。.apk 文件含有程序源代碼和資源。
(注:相當於項目文件)裝箱單是一個xml文件,在所有的程序中命名都是AndroidManifest.xml 。它還有一些其他 的功能,如:指明需要連接的庫、識別程序希望被授予的權限。
但是裝箱單的主要任務還是向android聲明程序的組件。一份裝箱單的例子:
1. <?xml version="1.0" encoding="utf-8"?> 
2.  
3. <manifest . . . > 
4.  
5.     <application . . . > 
6.  
7.         <activity android:name="com.example.project.FreneticActivity" 
8.  
9.                   android:icon="@drawable/small_pic.png" 
10.  
11.                   android:label="@string/freneticLabel"   
12.  
13.                   . . . > 
14.  
15.         </activity> 
16.  
17.         . . .  
18.  
19. </application> 
20.  
21. </manifest> 

<activity> 節點的name 屬性指明瞭 Activity 的類名. icon 和 label 屬性指明瞭展示activity時用到的資源。另一個節點的含義差不多 — <service> 是用來聲明services的, <receiver> 用來聲明broadtcast。
Android調用服務聲明 content providers. Activities, services。 content providers需要聲明,對系統不可見。另外, broadcast receivers可以不在裝箱單中聲明,可以動態得在代碼中聲明。
(見BroadcastReceiver 對象)通過 Context.registerReceiver()方法向系統註冊。對用戶來說,即使地圖程序是定義在另外一個程序中、在另外一個進程中運行,但是它看起來好像你的程序的一部分。
Android通過將2個activities放在用一個任務中,使得用戶有這樣的體驗。這一系列的activities,安排在一個堆棧中。堆棧中的根activity是任務的開始,或者說是用戶選擇的應用程序的第一個activity。堆棧頂部的activity 是當前正在運行的activity— 目前正在吸引用戶注意的一個。
當一個activity啓動另外一個的時候,新的activity被壓棧,變爲當前activity. 之前的activity 還在任務中。當用戶點擊後退(BACK)鍵,當前的acitivity被彈出棧,之前的activity成爲正在運行的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章