編輯:關於android開發
前面一個帖子,小編和大家大概了解了一下AsyncTask的多線程編程技術,今天我想聊一聊Android的四大組件(神器)之一的Service。
要想精通Service的相關知識點,還是需要學習很多東西的,當然小編今天寫的這篇文章只能算是讓新手快速了解何為Service、如何快速上手並且快速掌握Service的使用方法,算是入門級的教程。好了,老規矩了,廢話不多說,我們直接上代碼來看看Service如何使用。
PS:在這邊小編想插一句嘴,如果大家還在用Eclipse和ADT開發項目,強烈介意嘗試或轉向AS(Android Studio),至於原因,你問度娘,反正小編自從用了AS,像吃了麥炫,手指停不下來。
----------------------------------------------------------------------------------------------------------------------------------------
【定義一個服務】
首先,我們定義一個MyService.java類,當然作為一個服務類,必須要繼承Service(android.app.Service),看代碼:
Java代碼Service --> public abstract IBinder onBind(Intent intent) 這是一個抽象方法,必須被子類重寫!
ok,服務定義好了,不能就這麼空吧,光溜溜的總得放點干貨,不然這個服務就是個擺設,那麼下面我們就讓這個服務發揮它的作用!
我們在服務裡面重寫Service中的另一些常用的方法,看代碼:
Java代碼這邊不得不重點提一下onStartCommand()這個方法,因為我們服務所需要處理的邏輯代碼都寫在這個方法中。
和添加Activity一樣,我們添加了一個服務,那麼在AndroidManifest.xml文件中必須進行注冊才能生效,而且我需要告訴你,這是Android四大組件所共有的特點!!!
XML/HTML代碼【啟動和停止服務】
服務定義好了,下面我們就直接上代碼,來看看這個服務如何啟動和停止。
(1)先添加兩個Button(activity_main.xml)
XML/HTML代碼(2)接下來,修改主函數MainActivity的代碼:
Java代碼上面的代碼真的是太簡單了,主要作了以下工作:
(1)取得startService和stopService兩個按鈕實例,並且注冊了點擊事件;
(2)通過Intent對象,調用Activity的startService()和stopService()方法來啟動和停止服務。
Notice:你們有沒有發現一個問題?這裡的活動的啟動和停止完全是由活動本身控制的,如果我們start了服務,但是沒有點擊stop,那麼服務會一直處於運行狀態,此時服務如何讓自己停止下來?
慶幸的是,我們可以在不點擊stopService按鈕的前提下,調用stopSelf()這個方法就能讓服務停下來!這麼說不明白?沒關系,下面我們會通過代碼告訴你怎麼用它。
----------------------------------------------------------------------------------------------------------------------------------------
【小測試】
既然上面的代碼已經能夠完成服務的啟動和停止的邏輯流程了,那麼口說無憑,也很難讓人信服,那小編就打個Log給你看看,我們一起看看Service是如何運作的,來,上代碼!
Java代碼這個代碼也太簡單了吧,添加了3行Log,目的就是看:在我們點擊兩個按鈕的時候,整個Service什麼時候創建,什麼時候啟動,什麼時候毀滅!
請相信我,雖然代碼很簡單,邏輯也很low,但是這樣的學習和思考的過程在以後你編寫代碼的時候,了解Service的生命周期是很很很重要的!
我們來看一下執行結果,運行程序,查看Logcat中的打印日志:
(1)第一次點擊StartService按鈕後,MyService中的onCreate()和onStartCommand()方法都執行了,圖中黃色箭頭所示!
此時,我們可以在手機 --> 設置 --> 應用 --> 運行中看到這個服務,小編給您截個圖體驗一下:
(2)然後我們點擊stopService按鈕後,MyService中的onDestory()方法被執行,圖中藍色箭頭所示!
(3)此時可能你會有一個疑問?當我們點擊了startService按鈕以後,onCreate()和onStartCommand()方法同時被執行,這兩個方法有什麼區別?
OK!圖中的紅色箭頭給了我們答案:onCreat()方法是在服務第一次創建的時候調用的,而onStartCommand()方法則在每次啟動服務的時候都會被調用。
當我們在服務未啟動的時候,點擊startService按鈕,則此時會執行兩個方法;
但是服務啟動完成之後,再次點擊(隨便你點幾次)startService按鈕,你會發現只有onStartCommand()方法被執行。
我的Android進階之旅------Android 5.0中出現警告的解決方法: Service Intent must be explicit: 1.錯誤描述 今
android高仿京東垂直循環滾動新聞欄 京東的垂直滾動新聞欄的實現原理: 就是一個自定義的LinearLayout,並且textView能夠循環垂直滾動,而且條目可以
Git版本控制工具(一)----git的安裝及創建版本庫,git----git【聲明】 歡迎轉載,但請保留文章原始出處→_→
eclipse安裝Genymotion模擬器遇到的問題及解決方法,eclipsegenymotion 由於Android ADT裡邊的原生模擬器so慢,所以
【原創】StickHeaderListView的簡單實現,解決foote