天天看點

Android小項目之--服務【Service】

service 簡介

何謂“service”?“service” 意思即“服務”的意思, 像 windows 上面的服務一樣,有些服務是在背景上運作,幹着靜悄悄的勾當不讓人知道 。與 activity 不同,service 是并不直接與使用者互動的運作于背景的一類元件。

  google對service的解釋

一個服務不是一個單獨的程序。服務對象本身并不意味着它是在自己的程序中運作,除非另有規定,否則它與運作程式是同在一個程序中。

一個服務不是一個單獨的線程。它是一種手段,本身做着主線的工作 (以避免應用程式沒有響應的錯誤)。

  service 與 activity 的相同點與不同點

不同點:activity是與使用者互動的元件,即我們用眼睛可以看到的界面,而service是在背景運作,執行隐藏的動作。

相同點:使用activity 時我們需要在配置檔案中聲明<activity>标簽,同樣的使用service 也需要在配置檔案中聲明<service>标簽

  使用service

建立service需要繼承自 android.app.service 的類,然後重新實作在service各個狀态要回調的方法,service的回調方法有三個,分别是:

oncreate()

建立

onstart()

開始

ondestry()

釋放

注意:service是不能自己啟動的,隻有通過 context 對象 調用startservice和bindservice方法來啟動。但兩種方法的service生命周期是不同的,下面我們通過一個小例子來差別各自的生命周期。

例子效果圖如下:

Android小項目之--服務【Service】

代碼如下:

package com.terry;

import android.app.service;

import android.content.intent;

import android.os.ibinder;

import android.util.log;

public class servicesample extends service {

    final string tag="service";

    @override

    public ibinder onbind(intent intent) {

        // todo auto-generated method stub

        log.i(tag,"onbind");

        return null;

    }

    public boolean onunbind(intent intent) {

        log.i(tag, "onunbind");

        return super.onunbind(intent);

    public void onrebind(intent intent) {

        // todo auto-generated method stub 

        super.onrebind(intent);

        log.i(tag, "onrebind");

    public void oncreate() {

        super.oncreate();

        log.i(tag, "oncreate");

    public void ondestroy() {

        super.ondestroy();

        log.i(tag, "ondestroy");

    public void onstart(intent intent, int startid) {

        super.onstart(intent, startid);

        log.i(tag, "onstart");

}

當調用startservice方法時:

1、若servcie沒有啟動,則首先會調用該service的oncreate方法,然後再調用onstart方法。

2、若service己經啟動則首先會直接調用onstart方法,

3、關閉時使用stopservice來關閉。

當調用bindservice方法時:

1、若service沒有啟動,則首先調用oncreate方法,來初始化啟動service,然後調用service的onbind。

2、通過onunbind和ondestry方法停止service運作。

下面通過一組圖來更詳細的說明service的生命周期

Android小項目之--服務【Service】

開始服務

Android小項目之--服務【Service】

停止服務

Android小項目之--服務【Service】

綁定服務

Android小項目之--服務【Service】

銷毀服務

音樂服務demo

通過上面的小例子可能有些園友還是很模糊,下面通過一個播放音樂的小例子加深大家對service 的了解,該例子通過播放一首mp3 ,當使用者點選開始“按鈕”,音樂開始播放,即時你退出程式音樂也會播放,點選“停止”按鈕,停止播放音樂 。

該例子繼承service 然後重寫onstart播放音樂 重寫ondestry停止音樂 ,代碼如下:

import android.media.mediaplayer;

public class musicserver extends  service {

    private mediaplayer player;

    if(player==null)

    {

        player=mediaplayer.create(this, r.raw.start);

        player.start();

        player.stop();

完成了service類,我們隻要在對應的activity的事件中調用服務即可實作,代碼如下:

Android小項目之--服務【Service】

import android.app.activity;

import android.os.bundle;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.button;

public class musicactivity  extends activity{

    private intent intent=new intent("com.terry.android.music"); 

    protected void oncreate(bundle savedinstancestate) {

        super.oncreate(savedinstancestate);

        setcontentview(r.layout.music);

        findview();

        viewholder.mybutton.setonclicklistener(new onclicklistener() {

            @override

            public void onclick(view v) {

                // todo auto-generated method stub

                startservice(intent);

            }

        });

        viewholder.mybutton2.setonclicklistener(new onclicklistener() {

                stopservice(intent);

    void findview(){

        viewholder.mybutton=(button)findviewbyid(r.id.play);

        viewholder.mybutton2=(button)findviewbyid(r.id.stop);

運作效果圖:

Android小項目之--服務【Service】

差不多就到這裡吧,有點晚了,把源碼提供給大家:

本文 作者 “terry_龍”