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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 四大组件 —— 服务

發布時間:2023/12/9 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 四大组件 —— 服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、服務是什么

????????服務(Service)是Android?中實現程序后臺運行的解決方案,它非常適合用于去執行那些不需要和用戶交互而且還要求長期運行的任務。服務的運行不依賴于任何用戶界面,即使當程序被切換到后臺,或者用戶打開了另外一個應用程序,服務仍然能夠保持正常運行。

?????? 不過需要注意的是,服務并不是運行在一個獨立的進程當中的,而是依賴于創建服務時所在的應用程序進程。當某個應用程序進程被殺掉時,所有依賴于該進程的服務也會停止運行。

??????另外,也不要被服務的后臺概念所迷惑,實際上服務并不會自動開啟線程,所有的代碼都是默認運行在主線程當中的。也就是說,我們需要在服務的內部手動創建子線程,并在這里執行具體的任務,否則就有可能出現主線程被阻塞住的情況。

?

二、服務的基本用法

?????? 了解了Android 多線程編程的技術之后,下面就讓我們進入到本章的正題,開始對服務的相關內容進行學習。作為Android 四大組件之一,服務也少不了有很多非常重要的知識點,那我們自然要從最基本的用法開始學習了。

1 、定義一個服務

?????? 首先看一下如何在項目中定義一個服務。新建一個ServiceTest 項目,然后在這個項目中新增一個名為MyService 的類,并讓它繼承自Service,完成后的代碼如下所示

[java]?view plaincopy
  • public?class?MyService?extends?Service?{??
  • ????@Override??
  • ????public?IBinder?onBind(Intent?intent)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????return?null;??
  • }??
  • ?????? 目前MyService 中可以算是空空如也,但有一個onBind()方法特別醒目。這個方法是Service 中唯一的一個抽象方法,所以必須要在子類里實現。我們會在后面的小節中使用到onBind()方法,目前可以暫時將它忽略掉。

    ?????? 既然是定義一個服務,自然應該在服務中去處理一些事情了,那處理事情的邏輯應該寫在哪里呢?這時就可以重寫Service 中的另外一些方法了,如下所示:

    [java]?view plaincopy
  • public?class?MyService?extends?Service?{??
  • ??
  • ????@Override??
  • ????public?IBinder?onBind(Intent?intent)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????return?null;??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onCreate()?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????super.onCreate();??
  • ????????Log.v("MainActivity",?"onCreate");??
  • ????}??
  • ??????
  • ????@Override??
  • ????public?void?onStart(Intent?intent,?int?startId)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????super.onStart(intent,?startId);??
  • ????????Log.v("MainActivity",?"onStart");??
  • ????}??
  • ??????
  • ????@Override??
  • ????public?void?onDestroy()?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????super.onDestroy();??
  • ????????Log.v("MainActivity",?"onDestroy");??
  • ????}??
  • }??
  • ?????? 可以看到,這里我們又重寫了onCreate()、onStartCommand()和onDestroy()這三個方法,它們是每個服務中最常用到的三個方法了。其中onCreate()方法會在服務創建的時候調用,onStartCommand()方法會在每次服務啟動的時候調用,onDestroy()方法會在服務銷毀的時候調用。

    ?????通常情況下,如果我們希望服務一旦啟動就立刻去執行某個動作,就可以將邏輯寫在onStartCommand()方法里。而當服務銷毀時,我們又應該在onDestroy()方法中去回收那些不再使用的資源。

    ?????另外需要注意,每一個服務都需要在AndroidManifest.xml 文件中進行注冊才能生效,不知道你有沒有發現,這是Android 四大組件共有的特點。于是我們還應該修改AndroidManifest.xml文件,代碼如下所示:

    [java]?view plaincopy
  • <service???
  • ????????????android:name="cn.com.qiang.service.MyService">??
  • </service>??
  • 這樣的話,就已經將一個服務完全定義好了。

    ?

    2、啟動和停止一個服務

    我們在布局文件中加入了兩個按鈕,分別是用于啟動服務和停止服務的。然后修改MainActivity 中的代碼,如下所示:

    [java]?view plaincopy
  • Button?button1?=?(Button)findViewById(R.id.button1);??
  • button1.setOnClickListener(new?OnClickListener()?{??
  • ??????????????
  • ????@Override??
  • ????public?void?onClick(View?v)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????Intent?startintent?=?new?Intent(MainActivity.this,MyService.class);??
  • ????????startService(startintent);??
  • ????}??
  • });??
  • ??????????
  • Button?button2?=?(Button)findViewById(R.id.button2);??
  • button2.setOnClickListener(new?OnClickListener()?{??
  • ??????????????
  • ????@Override??
  • ????public?void?onClick(View?v)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????Intent?stopintent?=?new?Intent(MainActivity.this,MyService.class);??
  • ????????stopService(stopintent);??
  • ????}??
  • });??
  • ?

    我們如何才能證實服務已經成功啟動或者停止了呢?最簡單的方法就是在MyService 的幾個方法中加入打印日志,可以看到我們在MyService中已經加入了。

    下面我們看一下運行效果:

    開啟服務后,LogCat中打印

    關閉服務后,LogCat 中打印:

    總結

    以上是生活随笔為你收集整理的Android 四大组件 —— 服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。