1. 程式人生 > >Android開發之Service與IntentService的區別與使用場景

Android開發之Service與IntentService的區別與使用場景

Service

Service 是長期執行在後臺的應用程式元件。

Service 不是一個單獨的程序,它和應用程式在同一個程序中,Service 也不是一個執行緒,它和執行緒沒有任何關係,所以它不能直接處理耗時操作。如果直接把耗時操作放在 Service 的 onStartCommand() 中,很容易引起 ANR .如果有耗時操作就必須開啟一個單獨的執行緒來處理。

IntentService

IntentService 是繼承於 Service 並處理非同步請求的一個類,在 IntentService 內有一個工作執行緒來處理耗時操作,啟動 IntentService 的方式和啟動傳統 Service 一樣,同時,當任務執行完後,IntentService 會自動停止,而不需要我們去手動控制。另外,可以啟動 IntentService 多次,而每一個耗時操作會以工作佇列的方式在IntentService 的 onHandleIntent 回撥方法中執行,並且,每次只會執行一個工作執行緒,執行完第一個再執行第二個,以此類推。

而且,所有請求都在一個單執行緒中,不會阻塞應用程式的主執行緒(UI Thread),同一時間只處理一個請求。 那麼,用 IntentService 有什麼好處呢?首先,我們省去了在 Service 中手動開執行緒的麻煩,第二,當操作完成時,我們不用手動停止 Service。

接下來讓我們來看看如何使用,寫一個Demo來模擬兩個耗時操作。

比較Service 和 IntentService 處理耗時操作的結果

先分別在 Service 和 IntentService 裡面處理耗時,看看是什麼結果。首先建立一個 Service 服務,在其 onStartCommand() 中執行一個20s的耗時。

12345678910111213141516171819202122232425publicclassMyServiceextendsService{StringTAG="MyService";@OverridepublicIBinder onBind(Intent intent){returnnull;}@OverridepublicintonStartCommand(Intent intent,intflags,intstartId){Logger.d(TAG,"-->開始睡眠");try{Thread.sleep(20000);}catch(InterruptedException
e){e.printStackTrace();}Logger.d(TAG,"-->睡眠結束");returnsuper.onStartCommand(intent,flags,startId);}publicstaticvoidstartMyService(Context mContext){Intent intent=newIntent(mContext,MyService.class);mContext.startService(intent);}}

結果發生ANR。 ANR

然後試試 IntentService

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 publicclassMyIntentServiceextendsIntentService{ StringTAG="MyIntentService"; publicMyIntentService(){ super

相關推薦

Android開發ServiceIntentService區別使用場景

Service Service 是長期執行在後臺的應用程式元件。 Service 不是一個單獨的程序,它和應用程式在同一個程序中,Service 也不是一個執行緒,它和執行緒沒有任何關係,所以它不能直接處理耗時操作。如果直接把耗時操作放在 Service 的 onStartCommand() 中,

Android開發漫漫長途 XVI——ListViewRecyclerView項目實戰

列表 系列 緩存 廣泛 原理 前言 評論 request 功能點 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中

Android開發位置定位詳解例項解析(GPS定位、Google網路定位,BaiduLBS(SDK)定位)

/** * 由經緯度獲取所在的城市及區域資訊 * @author caizhiming * */ private class ReadJSONFeedTask extends AsyncTask<String, Void, String> {

Android開發聲網即時通訊訊飛語音識別相結合

聲網是一家提供語音、視訊即時通訊服務的公司,他的服務大多基於WebRTC開源專案並進行一些優化和修改。而訊飛語音識別應該不用多說了,老羅在釋出會上介紹得已經夠詳細了。 那麼下面進入今天的主題,就是讓聲網和訊飛識別同時使用,之前可能有朋友沒遇到過這樣的需求,那先說一下讓兩者同

Android 開發Service 探索如何保證Service不被殺死或被kill之後自動重啟

前言: 在我司專案1.0版本的時候訊息是使用的環信、用了之後發現各種bug,各種機型不支援導致app崩潰,於是在2.0版本果斷去掉環信,使用了公眾號用的那套訊息系統(老大自己寫的)並做了擴充套件升級。

Android開發漫漫長途 番外篇——內存泄漏分析解決

set 程序 靜態 內存 ins clas back undle 介紹 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,

Android 開發集成百度地圖的定位地圖展示

jni andro vra ada 列表 shee alias content markdown app 應用中,大多數應用都具有定位功能,百度定位就成了開發人員的集

android 開發 ListView Adapter 應用實踐

在開發android中,ListView 的應用顯得非常頻繁,只要需要顯示列表展示的應用,可以說是必不可少,下面是記錄開發中應用到ListView與Adapter 使用的例項: ListView 所在頁面中的佈局(listview_item.xml): <?xml version="1.0"

Android開發Webview中原生JS互動

文章目錄 概述 使用場景 互動方式 Java呼叫JS程式碼 JS呼叫Java程式碼 總結 概述 由於手機硬體資源的快速提升,使得采用混合開發的可能性逐漸成為現實並且流行起來。Android開發中

android開發fragmentactivity之間相互跳轉

   Fragment的產生與介紹 Android執行在各種各樣的裝置中,有小螢幕的手機,超大屏的平板甚至電視。針對螢幕尺寸的差距,很多情況下,都是先針對手機開發一套App,然後拷貝一份,修改佈局以適應平板神馬超級大屏的。難道無法做到一個App可以同時適應手機和平板麼

Android開發“ListViewRecyclerView的對比”

在Android開發最火熱的時候ListView是最長使用的一種展示多item的控制元件,而在2018年的現在已經很少有人用ListView了,使用最多當數RecyclerView了。 下面總結一下兩者的區別: 兩者的用法區別 佈局效果 對空資料的處理 HeaderV

Android開發RadioGroupRadioButton控制元件使用

      RadioButton即單選按鈕,它在開發中提供了一種“多選一”的操作模式,是Android開發中常用的一種元件,例如在使用者註冊時,選擇性別時只能從“男”或者“女”中選擇一個。與Web開發不同的是,在Android中可以使用RadioGroup來定義單選按鈕元件

Android開發啟動頁廣告頁

 在我們APP的開發過程中,啟動頁面是繞不開的,廣告頁面說不定,但是不得不說,這兩個介面都是經常要用到的。接下來我記錄一下我的實現過程。專案架構為MVP。    那麼先看看我們的需求和流程:(當然這也是可以根據實際需求改動的)  展示 logo 頁面3秒 服務端可

Android開發ActionBarDrawerLayout

ActionBar位於Activity的頂部,可用來顯示activity的標題、Icon、Actions和一些用於互動的View。它也可被用於應用的導航。 ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用Acti

Android開發呼叫相機拍照本地相簿選擇圖片

使用者看到的介面如下,也是我的xml介面: demo中有一個按鈕,點選彈出對話方塊提示使用者選擇:拍照、相簿。如下圖: 點選拍照,會開啟手機相機開始拍照,拍攝完後可以裁剪,如下圖: 這時候你可以直接點選確定,也可

淺談Android開發中的MVVM模式及MVP和MVC的區別

三種架構模式的演化: 什麼是MVVM? MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音訊、視訊、3D、動畫……,這導致了軟體UI層更加細節化、可定製化。同時,在技術層面,WPF也帶來

Android開發檔案記事本設計實現

(一)實驗型別:設計性(二)實驗目的:1.掌握檔案讀寫的方法。2.熟悉XML檔案的佈局設定,掌握利用DDMS檢視AVD檔案目錄的方法。(三)實驗內容與要求: 1.自己設定頁面佈局,當在頁面輸入“檔名”和“內容”後,單擊“儲存”按鈕可以實現將內容儲存到檔名所在的檔案中。2.通過

Android開發反射註解

反射 類型別Class的使用 類型別Class的例項獲取方式有一下三種 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

android開發手機微控制器藍芽模組通訊

之前兩篇都是在說與手機的連線,連線方法,和主動配對連線,都是手機與手機的操作,做起來還是沒問題的,但是最終的目的是與微控制器的藍芽模組的通訊。 下面是到目前為止嘗試的與微控制器的通訊方法,沒有成功,但是從思路上來說沒有問題,最大的問題是與微控制器配對的時候,微控制器的藍芽

Android開發WIFI網路連線處理

網路連線處理 在說WiFi之前,先來說說網路連線處理。 在Android開發過程中,對於一個需要連線網路的Android裝置,對裝置的網路狀態檢測是很有必要的!有很多的App都需要連線網路。判斷裝置是否已經連線網路,並且在連線網路的狀態下判斷是wifi無線連線還是GPRS手機網路連線,這