日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android小项目之--服务【Service】

發(fā)布時(shí)間:2023/12/15 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android小项目之--服务【Service】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  有段時(shí)間沒(méi)有寫(xiě)博客了,最近一段時(shí)間跳到了深圳,新的公司新的環(huán)境要去適應(yīng),人挺累的,所以近段時(shí)間沒(méi)有寫(xiě)博客。這幾天QQ群上有位朋友在問(wèn)要Service的例子,當(dāng)時(shí)沒(méi)有跟他應(yīng)答,現(xiàn)在抽空把例子整理了一下,發(fā)表上博客園,希望他能看得到。

?

  Service 簡(jiǎn)介

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

?

  Google對(duì)Service的解釋

  • 一個(gè)服務(wù)不是一個(gè)單獨(dú)的進(jìn)程。服務(wù)對(duì)象本身并不意味著它是在自己的進(jìn)程中運(yùn)行,除非另有規(guī)定,否則它與運(yùn)行程序是同在一個(gè)進(jìn)程中。
  • 一個(gè)服務(wù)不是一個(gè)單獨(dú)的線程。它是一種手段,本身做著主線的工作 (以避免應(yīng)用程序沒(méi)有響應(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 的類(lèi),然后重新實(shí)現(xiàn)在Service各個(gè)狀態(tài)要回調(diào)的方法,Service的回調(diào)方法有三個(gè),分別是:

  • onCreate()
    創(chuàng)建
  • onStart()
    開(kāi)始
  • onDestry()
    釋放

注意:Service是不能自己?jiǎn)?dòng)的,只有通過(guò) Context 對(duì)象 調(diào)用startService和bindService方法來(lái)啟動(dòng)。但兩種方法的Service生命周期是不同的,下面我們通過(guò)一個(gè)小例子來(lái)區(qū)別各自的生命周期。

例子效果圖如下:

代碼如下:

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");
????}
????
}

?

當(dāng)調(diào)用startService方法時(shí):

  • 1、若Servcie沒(méi)有啟動(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來(lái)關(guān)閉。

當(dāng)調(diào)用bindService方法時(shí):

  • 1、若Service沒(méi)有啟動(dòng),則首先調(diào)用onCreate方法,來(lái)初始化啟動(dòng)Service,然后調(diào)用Service的onBind。
  • 2、通過(guò)onUnbind和onDestry方法停止Service運(yùn)行。

下面通過(guò)一組圖來(lái)更詳細(xì)的說(shuō)明Service的生命周期

開(kāi)始服務(wù)

停止服務(wù)

綁定服務(wù)

銷(xiāo)毀服務(wù)

?

音樂(lè)服務(wù)DEMO

通過(guò)上面的小例子可能有些園友還是很模糊,下面通過(guò)一個(gè)播放音樂(lè)的小例子加深大家對(duì)Service 的理解,該例子通過(guò)播放一首mp3 ,當(dāng)用戶點(diǎn)擊開(kāi)始“按鈕”,音樂(lè)開(kāi)始播放,即時(shí)你退出程序音樂(lè)也會(huì)播放,點(diǎn)擊“停止”按鈕,停止播放音樂(lè) 。

該例子繼承service 然后重寫(xiě)onStart播放音樂(lè) 重寫(xiě)onDestry停止音樂(lè) ,代碼如下:

?

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類(lèi),我們只要在對(duì)應(yīng)的Activity的事件中調(diào)用服務(wù)即可實(shí)現(xiàn),代碼如下:

? 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);
????}
}

?

?

運(yùn)行效果圖:

差不多就到這里吧,有點(diǎn)晚了,把源碼提供給大家:/Files/TerryBlog/ServiceTestDemo.rar

總結(jié)

以上是生活随笔為你收集整理的Android小项目之--服务【Service】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。