小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android Service 詳解及實(shí)例

 東茹閣 2013-06-25
Service 簡介
何謂“Service”?“Service” 意思即“服務(wù)”的意思, 像 Windows 上面的服務(wù)一樣,有些服務(wù)是在后臺(tái)上運(yùn)行,干著靜悄悄的勾當(dāng)不讓人知道 。與 Activity 不同,Service 是并不直接與用戶交互的運(yùn)行于后臺(tái)的一類組件。

  Google對Service的解釋
  • 一個(gè)服務(wù)不是一個(gè)單獨(dú)的進(jìn)程。服務(wù)對象本身并不意味著它是在自己的進(jìn)程中運(yùn)行,除非另有規(guī)定,否則它與運(yùn)行程序是同在一個(gè)進(jìn)程中。
  • 一個(gè)服務(wù)不是一個(gè)單獨(dú)的線程。它是一種手段,本身做著主線的工作 (以避免應(yīng)用程序沒有響應(yīng)的錯(cuò)誤)。
  Service 與 Activity 的相同點(diǎn)與不同點(diǎn)
  • 不同點(diǎn):Activity是與用戶交互的組件,即我們用眼睛可以看到的界面,而Service是在后臺(tái)運(yùn)行,執(zhí)行隱藏的動(dòng)作。
  • 相同點(diǎn):使用Activity 時(shí)我們需要在配置文件中聲明<activity>標(biāo)簽,同樣的使用Service 也需要在配置文件中聲明<service>標(biāo)簽
  使用Service
創(chuàng)建Service需要繼承自 android.app.Service 的類,然后重新實(shí)現(xiàn)在Service各個(gè)狀態(tài)要回調(diào)的方法,Service的回調(diào)方法有三個(gè),分別是:
  • onCreate()
    創(chuàng)建
  • onStart()
    開始
  • onDestry()
    釋放
注意:Service是不能自己啟動(dòng)的,只有通過 Context 對象 調(diào)用startService和bindService方法來啟動(dòng)。但兩種方法的Service生命周期是不同的,下面我們通過一個(gè)小例子來區(qū)別各自的生命周期。
例子效果圖如下:
19241351ll9y9it0yizl9x.png

代碼如下:

  1. package com.terry;[/align][align=left]import android.app.Service;
  2. import android.content.Intent;
  3. import android.os.IBinder;
  4. import android.util.Log;[/align][align=left]public class ServiceSample extends Service {[/align][align=left]    final String TAG="Service";
  5.     @Override
  6.     public IBinder onBind(Intent intent) {
  7.         // TODO Auto-generated method stub
  8.         Log.i(TAG,"onBind");
  9.         return null;
  10.     }
  11.     @Override
  12.     public boolean onUnbind(Intent intent) {
  13.         // TODO Auto-generated method stub
  14.         Log.i(TAG, "onUnbind");
  15.         return super.onUnbind(intent);
  16.     }[/align][align=left]    @Override
  17.     public void onRebind(Intent intent) {
  18.         // TODO Auto-generated method stub
  19.         super.onRebind(intent);
  20.         Log.i(TAG, "onRebind");
  21.     }
  22.     @Override
  23.     public void onCreate() {
  24.         // TODO Auto-generated method stub
  25.         super.onCreate();
  26.         Log.i(TAG, "onCreate");
  27.     }
  28.     @Override
  29.     public void onDestroy() {
  30.         // TODO Auto-generated method stub
  31.         super.onDestroy();
  32.         Log.i(TAG, "onDestroy");
  33.     }
  34.     @Override
  35.     public void onStart(Intent intent, int startId) {
  36.         // TODO Auto-generated method stub
  37.         super.onStart(intent, startId);
  38.         Log.i(TAG, "onStart");
  39.     }
  40. }

當(dāng)調(diào)用startService方法時(shí):
  • 1、若Servcie沒有啟動(dòng),則首先會(huì)調(diào)用該Service的onCreate方法,然后再調(diào)用onStart方法。
  • 2、若Service己經(jīng)啟動(dòng)則首先會(huì)直接調(diào)用onStart方法,
  • 3、關(guān)閉時(shí)使用stopservice來關(guān)閉。

當(dāng)調(diào)用bindService方法時(shí):
  • 1、若Service沒有啟動(dòng),則首先調(diào)用onCreate方法,來初始化啟動(dòng)Service,然后調(diào)用Service的onBind。
  • 2、通過onUnbind和onDestry方法停止Service運(yùn)行。

    下面通過一組圖來更詳細(xì)的說明Service的生命周期 192414a1gl2jb11eflfu0y.png


    開始服務(wù)
    192415hh3m113u17h31kuh.png
    停止服務(wù)
    192415abmbvdabacx4cxac.png
綁定服務(wù)
1924164rutbteepjqtbntu.png

銷毀服務(wù)

音樂服務(wù)DEMO通過上面的小例子可能有些園友還是很模糊,下面通過一個(gè)播放音樂的小例子加深大家對Service 的理解,該例子通過播放一首mp3 ,當(dāng)用戶點(diǎn)擊開始“按鈕”,音樂開始播放,即時(shí)你退出程序音樂也會(huì)播放,點(diǎn)擊“停止”按鈕,停止播放音樂 。該例子繼承service 然后重寫onStart播放音樂 重寫onDestry停止音樂 ,代碼如下:

  1. package com.terry;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.media.MediaPlayer;
  5. import android.os.IBinder;
  6. public class musicServer extends  Service {
  7.     private MediaPlayer player;
  8.     @Override
  9.     public IBinder onBind(Intent intent) {
  10.         // TODO Auto-generated method stub
  11.         return null;
  12.     }
  13.     @Override
  14.     public void onStart(Intent intent, int startId) {
  15.         // TODO Auto-generated method stub
  16.         super.onStart(intent, startId);
  17.     if(player==null)
  18.     {
  19.         player=MediaPlayer.create(this, R.raw.start);
  20.         player.start();
  21.     }
  22.     }
  23.     @Override
  24.     public void onDestroy() {
  25.         // TODO Auto-generated method stub
  26.         super.onDestroy();
  27.         player.stop();
  28.     }
  29. }

完成了service類,我們只要在對應(yīng)的Activity的事件中調(diào)用服務(wù)即可實(shí)現(xiàn),代碼如下:

  1. package com.terry;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. public class musicActivity  extends Activity{
  9.     private Intent intent=new Intent("com.terry.Android.MUSIC");
  10.     @Override
  11.     protected void onCreate(Bundle savedInstanceState) {
  12.         // TODO Auto-generated method stub
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.music);
  15.         findView();
  16.         viewHolder.myButton.setOnClickListener(new OnClickListener() {
  17.             @Override
  18.             public void onClick(View v) {
  19.                 // TODO Auto-generated method stub
  20.                 startService(intent);
  21.             }
  22.         });
  23.         
  24.         viewHolder.myButton2.setOnClickListener(new OnClickListener(){
  25.             @Override
  26.             public void onClick(View v) {
  27.                 // TODO Auto-generated method stub
  28.                 stopService(intent);
  29.             }
  30.         });
  31.     }
  32.     void findView(){
  33.         viewHolder.myButton=(Button)findViewById(R.id.play);
  34.         viewHolder.myButton2=(Button)findViewById(R.id.stop);
  35.     }
  36. }
源碼下載:  ServiceTestDemo.rar (51.64 KB, 下載次數(shù): 252) 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多