1. 程式人生 > >安卓Service生命週期,你應該知道的都在這裡

安卓Service生命週期,你應該知道的都在這裡

如有轉載,請申明:

Service是安卓的四大元件之一。它是一個沒有介面的元件,且優先順序大於後臺程序。

瞭解它的生命週期很有必要。

Service啟動的分類

啟動服務: 通過startService啟動的服務稱為啟動服務

繫結啟動服務: 通過bindService啟動的服務成為繫結啟動服務

混個開啟服務: 既開啟了服務,又綁定了服務。但通常是先開啟服務,然後繫結,解綁,關閉。

生命週期

對於服務來說,有兩種啟動方式。

start方式啟動服務:

onCreate: 服務建立時呼叫

onStartCommand: 服務被呼叫開啟方法時呼叫

onDestroy: 服務銷燬時呼叫

當在程式碼中執行startService時,如果服務不存在,就會先呼叫onCreate,然後呼叫onStartCommand;而如果服務已經存在,則只會呼叫onStartCommand

當在程式碼中執行stopService時,就會執行onDestroy

需要注意的是,start方式開啟的服務與開啟者(Activity)無直接聯絡,也就是當應用退出後,服務還是會繼續執行。

bind方式啟動服務:

onCreate: 服務建立時呼叫

onBind: 服務被繫結時呼叫

onServiceConnected: 服務連線時呼叫。該API並不屬於Service,而是屬於ServiceConnection

。而這個介面作為引數在繫結時傳遞給了Service

onUnbind: 服務被解綁時呼叫

onDestroy: 服務銷燬時呼叫

這種方式的執行順序大致就是上述順序方式。

start方式開始的服務不同的是,當繫結的應用退出時,服務也會停止。

混合開啟服務:

onCreate: 服務建立時呼叫

onStartCommand: 服務被呼叫開啟方法時呼叫

onBind: 服務被繫結時呼叫

onServiceConnected: 服務連線時呼叫。該API並不屬於Service,而是屬於ServiceConnection。而這個介面作為引數在繫結時傳遞給了Service

onUnbind: 服務被解綁時呼叫

onDestroy: 服務銷燬時呼叫

混合開啟服務一般是按照上述流程,也就是先開啟服務,然後在繫結,在關閉服務之前,解綁服務。這樣可以避免一些莫名的問題。

混合開啟服務的好處在於,既可以實現應用退出後,仍然可以執行服務,在應用執行時,可以繫結服務,呼叫服務中的方法。

相關推薦

Service生命週期應該知道這裡

如有轉載,請申明: Service是安卓的四大元件之一。它是一個沒有介面的元件,且優先順序大於後臺程序。 瞭解它的生命週期很有必要。 Service啟動的分類 啟動服務: 通過startService啟動的服務稱為啟動服務 繫結啟動服務: 通過bindSe

Activity生命週期的回撥應該知道得更多!--Android原始碼剖析(上)

private class ApplicationThread extends ApplicationThreadNative { //... public final void schedulePauseActivity(IBinder token, boolean finished,

Activity生命週期的回撥應該知道得更多!--Android原始碼剖析(下)

private void handleBindApplication(AppBindData data) { mBoundApplication = data; mConfiguration = new Configuration(data.co

重要生命週期和流程圖

轉載自https://blog.csdn.net/RoseChan/article/details/51486513 1-Activity生命週期 2-Fragment生命週期 3-Service生命週期 4-View的繪製流程圖 5-Looper-Mes

【Spring註解驅動開發】使用InitializingBean和DisposableBean來管理bean的生命週期真的瞭解嗎?

## 寫在前面 > 在《[【Spring註解驅動開發】如何使用@Bean註解指定初始化和銷燬的方法?看這一篇就夠了!!](https://mp.weixin.qq.com/s?__biz=Mzg3MzE1NTIzNA==&mid=2247484985&idx=1&sn=bf7e

關於 Token應該知道的十件事

敏感信息 you load 冒充 tro hex 服務器 xhr cors 轉自:http://ju.outofmemory.cn/entry/134189 原文是一篇很好的講述 Token 在 Web 應用中使用的文章,而這是我和 Special 合作翻譯的譯文。 1.

做網站SEO優化這些網絡引流方法應該知道

尋求 可能 垃圾郵件 百度搜 如果 什麽 網站鏈接 很快 建立 對於網站SEO優化來說,網站流量的重要性不言而喻!國內的站長平臺工具通過用網站流量來衡量一個網站的權重,當你的網站流量很高的時候,同時會影響你網站的權重,進而影響你網站SEO優化排名。所以說流量對於一個網站的意

Select 使用不當引發的core應該知道

retcode 代碼 async fetch sse com 基礎 -a cnblogs 排查一個死機問題,搞了好幾天時間,最終確定原因;最終確定問題原因,在此分享一下; 第一步:常規根據core文件查看棧信息,gdb –c core xxxx 如下rip不正確,指令地址錯

關於首個受監管的穩定幣GUSD應該知道這些真相

今天早上,美國交易所 Gemini 和另外一個區塊鏈創業公司 Paxos 同時獲得了美國紐約金融服務局的批准,可以在受政府監管的情況下發行錨定美元的數字加密貨幣 GUSD 和 PAX。這種與美元掛鉤而且可以與美元進行直接兌換的數字加密貨幣在區塊鏈行業中有不少先例,比如我們熟悉

看完這篇應該知道什麼是Linux了~

Linux上的檔案系統一般來說就是EXT2或EXT3,但這篇文章並不準備一上來就直接講它們,而希望結合Linux作業系統並從檔案系統建立的基礎——硬碟開始,一步步認識Linux的檔案系統。 1.機械硬碟的物理儲存機制 現代計算機大部分檔案儲存功能都是由機械硬碟這種裝置

2019Java依然免費應該知道的事實真相不要被誤導--技術領導必讀

     2019年關於Java是否免費,一直存在誤解,國內新聞斷章取義,搞錯概念,誤導開發者。 作為企業的技術領導應該弄清楚關鍵的概念,避免被誤導。      國內一直謠傳Java2019年1月1號收費,今天都2號了,使用Java的企業運轉一切正

當問起執行緒池(Java中的ThreadPoolExecutor類)應該知道的基礎知識點

執行緒池 執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後自動啟動這些任務。執行緒池執行緒都是後臺執行緒。每個執行緒都使用預設的堆疊大小,以預設的優先順序執行,並處於多執行緒單元中。如果某個執行緒在託管程式碼中空閒(如正在等待某個事件),則執行緒池將插入另一個輔助執

當面試官問執行緒池時應該知道些什麼?

Java面試中,執行緒池也算是一個高頻的問題,其實就JDK原始碼來看執行緒池這一塊的實現程式碼應該算是寫的清晰易懂的,通過這篇文章,我們就來盤點一下執行緒池的知識點。 本文基於JDK1.8原始碼進行分析 首先看下執行緒池建構函式: public ThreadP

JAVA最起碼應該知道這些!

馬老師說過,員工的離職原因很多,只有兩點最真實: 錢,沒給到位 心,受委屈了 當然,我是想換個平臺,換個方向,想清楚為什麼要跳槽,如果真的要跳槽,想要拿到一個理想的offer,除了運氣,基本功也要足夠的紮實,希望下面的面試經驗能給你們能夠提供一些幫助。 專案經驗 面試官在一

《關於排序應該知道的》

一、關於排序的幾個概念 (1)資料表:待排序資料元素的有限集合。 (2)排序碼(也常稱為“關鍵字”):資料元素中通常不止含有一個屬性域(即資料成員),選定其中一個屬性域作為排序的依據。該域稱為

用友雲開發者中心應該知道的那些事

bcb 過程 自定義環境 bfd 生產環境 log 灰度 查找 了解 2018開發者中心產品不斷進行架構升級優化,同時也在不斷完善產品能力,目前已支撐內部大量雲產品的運行,下面給大家介紹一下新增的幾大能力:一、一體化的計算資源管理1.提供資源池使用率看板,資源池的內存分配和

關於微軟Silverlight應該知道的10件事

對於任何成長中的企業來說,設計一個合適的網站是一件非常重要的事情,但是如何讓你的網站具有富網際網路應用程式(Rich Internet Applications,RIA)的體驗卻不是那麼簡單。為了在這方面為開發者減輕負擔,微軟最近推出了Silverlight——這是一個針對W

現在寫 PHP應該知道這些

轉載自:http://0x1.im/blog/php/php-now-you-shoud-know.html 首先你應該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。我建議如果有條件,最好使用最新的版本。 你應該看過 PHP The Ri

想要學習python應該知道的內容是啥?

ray mark 技術 程序 智能 四種 領域 ofo 第一個 Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。在學習Python之前,我們應該知道這些內容: 它是一種面向對象的解釋型計算機程序設計

程式設計師應該知道的資料結構之跳錶

跳錶的原理 跳錶也叫跳躍表,是一種動態的資料結構。如果我們需要在有序連結串列中進行查詢某個值,需要遍歷整個連結串列,二分查詢對連結串列不支援,二分查詢的底層要求為陣列,遍歷整個連結串列的時間複雜度為O(n)。我們可以把連結串列改造成B樹、紅黑樹、AVL樹等資料結構來提升查詢效率,但是B樹、紅黑樹、AVL樹這些