Android Service初涉

一,Service概述

服務(Service)是Android系統(tǒng)中4個應用程序組件之一。服務主要用于兩個目的:后臺運行和跨進程訪問

通過啟動一個服務,可以在不顯示界面的前提下在后臺運行指定的任務,這樣可以不影響用戶做其他事情。

通過AIDL服務可以實現(xiàn)不同進程之間的通信,這也是服務的重要用途之一。

二,Service基礎

Service并沒有實際界面,而是一直在Android系統(tǒng)的后臺運行。

一般使用Service為應用程序提供一些服務,或不需要界面的功能,例如,從Internet下載文件、控制Video播放器等。

這里我主要介紹Service的啟動和結(jié)束過程(Service的生命周期)以及啟動Service的各種方法

1.生命周期

Service與Activity一樣,也有一個從啟動到銷毀的過程,但Service的這個過程比Activity簡單得多。

一個服務實際上是一個繼承android.app.Service的類

Service啟動到銷毀的過程只會經(jīng)歷如下3個階段:

創(chuàng)建服務:調(diào)用 public void onCreate();

開始服務:調(diào)用 public void onStart(Intent intent, int startId);

銷毀服務:調(diào)用 public void onDestroy();

一個服務只會創(chuàng)建一次,銷毀一次,但可以開始多次,因此,onCreate和onDestroy方法只會被調(diào)用一次,而onStart方法會被調(diào)用多次。

2,創(chuàng)建和使用Service的步驟

(1)編寫一個服務類,該類必須從android.app.Service繼承。

public class MyService extends Service{

@Override

public IBinder onBind(Intent intent)

@Override

public void onCreate()

Service類涉及到3個生命周期方法,但這3個方法并不一定在子類中覆蓋,可根據(jù)不同需求來決定使用哪些生命周期方法。

在Service類中有一個onBind方法,該方法是一個抽象方法,在Service的子類中必須覆蓋。這個方法當Activity與Service綁定時被調(diào)用

(2)在AndroidManifest.xml文件中使用標簽來配置服務。一般需要將標簽的android:enabled屬性值設為true,并使用android:name屬性指定在第1步建立的服務類名

(3)如果要開始一個服務,使用startService方法,停止一個服務要使用stopService方法。此時需要使用Intent對象

//構造Intent對象

Intent? serviceIntent = new Intent(this, MyService.class);

或者

Intent serviceIntent = new Intent("net.blogjava.mobile.myService");

Bundle bundle? = new Bundle();

bundle.putInt("op", op);

serviceIntent.putExtras(bundle);

startService(serviceIntent);? ? ? //啟動服務

stopService(serviceIntent);? ? ? //停止服務

三,系統(tǒng)服務

(1)獲得系統(tǒng)服務

通過Activity類的getSystemService方法可以獲得指定的對象(系統(tǒng)服務);

getSystemService方法只有一個String類型的參數(shù),表示系統(tǒng)服務的ID,這個ID在整個Android系統(tǒng)中是唯一的

Android SDK在android.content.Context類中定義了這些ID:例如

public static final String AUDIO_SERVICE = "audio"; //? 定義音頻服務的ID

public static final String WINDOW_SERVICE = "window";? //? 定義窗口服務的ID

public static final String NOTIFICATION_SERVICE = "notification";? ? ? //? 定義通知服務的ID

(2)使用系統(tǒng)服務

//? 獲得WindowManager對象

android.view.WindowManager windowManager = (android.view.WindowManager).getSystemService(Context.WINDOW_SERVICE);

//? 在窗口的標題欄輸出當前窗口的寬度和高度,例如,320*480

setTitle(String.valueOf(windowManager.getDefaultDisplay().getWidth()) + "*"

+ String.valueOf( windowManager.getDefaultDisplay().getHeight()));

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • #Android 基礎知識點總結(jié) ---------- ##1.adb - android debug bridg...
    Mythqian閱讀 3,355評論 2 11
  • 哎呀呀 ,馬上就要面臨找工作了,媛媛心里緊張呀. 作為一個即將畢業(yè)的Android程序媛,開始面臨找工作了,...
    左神話閱讀 4,824評論 7 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,067評論 25 708
  • 大地不知不覺地收住了身腰,冒著白茫茫的霧氣。風一經(jīng)而行不息的情勢隨著行人來往的步伐而加快速度。裂開的口子拉成了長長...
    圖格那黎99閱讀 329評論 0 6
  • 第一眼看到這篇文章,你會不會以為這又是一篇毒雞湯?如果是,請原諒我這個寫文小白。但我這個真的不是毒雞湯,而是一盆涼...
    溫雪233閱讀 298評論 0 0