Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android ApiDemos示例解析(38)

Android ApiDemos示例解析(38)

編輯:Android開發教程

App->Service->Foreground Service Controller

和Windows中的Service類似,Android系統也提供了一種稱為“Service”的組件通常在後台運行。Activity 可以用來啟動一 個Service,Service啟動後可以保持在後台一直運行,即使啟動它的Activity退出或是切換到別的應用Service也能保持運行狀 態。

Service 可以以兩種形式存在:

Started 當一個如Activity使用startService()來啟動一個Service,一旦Service啟動後,就不受啟動它的Activity控制, 可以在後台長期運行,通常這種Service在後台執行某個費時操作(如下載文件)不會向啟動它的Activity返回結果。

Bound 為Activity或是其它程序部件使用bindService()來啟動Service。Bound Service提供了一種Client/Service方法允許 調用Service的Activity與Service進行交互:發送請求,取得結果,並支持進程間通信。 一般Bound Service的生命周期和啟動 它的Activity相同,多個Activity可以同時綁定一個Service。 當所有Activity 都斷開與Service之間的綁定時。Service自動 結束。

雖然Service可以有上述兩種表現形式,這只是為了說明上的方便,實際上同一個Service可以同時以兩種方式存在,只要實 現兩種方法所定義的接口函數就可以了。

創建一個Service,首先需要定義一個Service的子類,然後根據需要重載 Service定義的一些核心方法:

onStartCommand() 當一個Activity調用startService時,Android系統會調用Service的onStartCommand()方法, 前面說過 使用startService啟動的Service會在後台長期運行,不受啟動它的Activity控制,因此應用程序有責任來停止Service, Service也可以調用stopSelf來停止自身。

onBind() 當一個Activity 使用bindService()來綁定Service時Android系統會調用Service的onBind方法,onBind需要返回 一個IBind對象給調用者(Client)。Client然後可以使用IBind提供的方法來使用Service。

onCreate() Service第一次創建時被調用,和Activity的onCreate類似。

onDestroy() Service退出時調用。

定義了Service類和實現相應方法後,和Activity一樣,也需要在AndroidManifest.xml中定義這個Service:

<manifest … >

<application … >

<service android:name=”.ExampleService” />

< /application>

< /manifest>

和Activity一樣,也可以為Service定義Intent Filter,如果你 不想共享這個Service,可以將android:exported屬性定義為false。

通常情況下Service在後台運行,當Android也支持 Service運行在前台,運行在前台的Service必須在屏幕頂端的Status Bar提供一個Notification以提示用戶有Service在運行。 比如提供個Media Player使用的Service運行在前台,而在標題欄顯示當前曲目。

本例Foreground Service Controller 就顯示了一個在前台運行的Service, 前台運行的Service可以通過調用startForeground()使Service在前台運行。 stopForeground停止前台運行,但Service本身不會停止。 startForeground,stopForeground是從2.0開始支持的,之前的版本 采用setForeground。

本例為了支持2.0之前和2.0之後的版本,采用了Reflection的方法來來查找當前版本是否含有 startForeground和stopForeground,如果有則調用,沒有則還是使用setForeground。

如果找到的話,以下的變量用來 存儲startForeground和stopForeground方法。和本例Service不相關,就不詳述了。只要知道startForegroundCompat 和 stopForegroundCompat的功能就是startForeground 和stopForeground就行了。

private static final Class[] mStartForegroundSignature = new Class[] {
int.class, Notification.class};
private static final Class[] mStopForegroundSignature = new Class[] {
boolean.class};
private Method mStartForeground;
private Method mStopForeground;
private Object[] mStartForegroundArgs = new Object[2];
private Object[] mStopForegroundArgs = new Object[1];

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved