Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android小項目之--服務【Service】

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

編輯:Android開發實例

  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生命周期是不同的,下面我們通過一個小例子來區別各自的生命周期。

例子效果圖如下:

 

 

package com.terry;

import android.app.Activity;
import android.content.Intent;
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"); 
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        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() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                stopService(intent);
            }
        });
    }
    
    
    void findView(){
        viewHolder.myButton=(Button)findViewById(R.id.play);
        viewHolder.myButton2=(Button)findViewById(R.id.stop);
    }
}

 

 

運行效果圖:

差不多就到這裡吧,有點晚了,把源碼提供給大家:/Files/TerryBlog/ServiceTestDemo.rar

代碼如下:

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;
    }
    
    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Log.i(TAG, "onUnbind");
        return super.onUnbind(intent);
    }

    @Override
    public void onRebind(Intent intent) {
        // TODO Auto-generated method stub 
        super.onRebind(intent);
        Log.i(TAG, "onRebind");
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.i(TAG, "onCreate");
    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.i(TAG, "onDestroy");
    }
    
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        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的生命周期

 

開始服務

停止服務

綁定服務

銷毀服務

 

音樂服務DEMO

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

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

 

package com.terry;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class musicServer extends  Service {

    private MediaPlayer player;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
    if(player==null)
    {
        player=MediaPlayer.create(this, R.raw.start);
        player.start();
    }
    }
    
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        player.stop();
    }
}

 

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

 

 

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