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的耗時。
12345678910111213141516171819202122232425 | publicclassMyServiceextendsService{StringTAG="MyService";@OverridepublicIBinder onBind(Intent intent){returnnull;}@OverridepublicintonStartCommand(Intent intent,intflags,intstartId){Logger.d(TAG,"-->開始睡眠");try{Thread.sleep(20000);}catch(InterruptedException |
結果發生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開發之Service與IntentService的區別與使用場景Service Service 是長期執行在後臺的應用程式元件。 Service 不是一個單獨的程序,它和應用程式在同一個程序中,Service 也不是一個執行緒,它和執行緒沒有任何關係,所以它不能直接處理耗時操作。如果直接把耗時操作放在 Service 的 onStartCommand() 中, Android開發之漫漫長途 XVI——ListView與RecyclerView項目實戰列表 系列 緩存 廣泛 原理 前言 評論 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開發之fragment與activity之間相互跳轉Fragment的產生與介紹 Android執行在各種各樣的裝置中,有小螢幕的手機,超大屏的平板甚至電視。針對螢幕尺寸的差距,很多情況下,都是先針對手機開發一套App,然後拷貝一份,修改佈局以適應平板神馬超級大屏的。難道無法做到一個App可以同時適應手機和平板麼 Android開發之“ListView與RecyclerView的對比”在Android開發最火熱的時候ListView是最長使用的一種展示多item的控制元件,而在2018年的現在已經很少有人用ListView了,使用最多當數RecyclerView了。 下面總結一下兩者的區別: 兩者的用法區別 佈局效果 對空資料的處理 HeaderV Android開發之RadioGroup與RadioButton控制元件使用RadioButton即單選按鈕,它在開發中提供了一種“多選一”的操作模式,是Android開發中常用的一種元件,例如在使用者註冊時,選擇性別時只能從“男”或者“女”中選擇一個。與Web開發不同的是,在Android中可以使用RadioGroup來定義單選按鈕元件 Android開發之啟動頁與廣告頁在我們APP的開發過程中,啟動頁面是繞不開的,廣告頁面說不定,但是不得不說,這兩個介面都是經常要用到的。接下來我記錄一下我的實現過程。專案架構為MVP。 那麼先看看我們的需求和流程:(當然這也是可以根據實際需求改動的) 展示 logo 頁面3秒 服務端可 Android開發之ActionBar與DrawerLayoutActionBar位於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手機網路連線,這 |