欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android服務(wù),android服務(wù)的生命周期

android 開啟服務(wù)

開啟服務(wù)有兩種方式: startService 和 bindService 。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、建湖網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為建湖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

首先在 AndroidManifest.xml 文件中聲明

啟動(dòng)服務(wù):

開啟服務(wù)時(shí),調(diào)用一次 startService() ,生命周期執(zhí)行的方法依次是: onCreate() == onStartCommand();

調(diào)用多次 startService() , onCreate() 只有第一次會(huì)被執(zhí)行,而 onStartCommand() 會(huì)執(zhí)行多次。

該方式需要一個(gè) ServiceConnection 接口的實(shí)現(xiàn)類對(duì)象

MyServiceConnection.java :

MyService.java :

啟動(dòng)服務(wù):

bindService 開啟服務(wù),生命周期執(zhí)行的方法依次是:

onCreate() == onBind() == onServiceConnected();

調(diào)用多次 bindService() , onCreate() 和 onBind() 都只在第一次會(huì)被執(zhí)行, onServiceConnected() 會(huì)執(zhí)行多次。

Android 服務(wù)的限制

Google官網(wǎng)將Android服務(wù)分為了三種,前臺(tái)服務(wù),后臺(tái)服務(wù)和綁定服務(wù):

前臺(tái)服務(wù)執(zhí)行一些用戶能注意到的操作。例如,音頻應(yīng)用會(huì)使用前臺(tái)服務(wù)來播放音頻曲目。前臺(tái)服務(wù)必須顯示 通知 。即使用戶停止與應(yīng)用的交互,前臺(tái)服務(wù)仍會(huì)繼續(xù)運(yùn)行。

后臺(tái)服務(wù)執(zhí)行用戶不會(huì)直接注意到的操作。例如,如果應(yīng)用使用某個(gè)服務(wù)來壓縮其存儲(chǔ)空間,則此服務(wù)通常是后臺(tái)服務(wù)。

當(dāng)應(yīng)用組件通過調(diào)用 bindService() 綁定到服務(wù)時(shí),服務(wù)即處于 綁定 狀態(tài)。綁定服務(wù)會(huì)提供客戶端-服務(wù)器接口,以便組件與服務(wù)進(jìn)行交互、發(fā)送請(qǐng)求、接收結(jié)果,甚至是利用進(jìn)程間通信 (IPC) 跨進(jìn)程執(zhí)行這些操作。僅當(dāng)與另一個(gè)應(yīng)用組件綁定時(shí),綁定服務(wù)才會(huì)運(yùn)行。多個(gè)組件可同時(shí)綁定到該服務(wù),但全部取消綁定后,該服務(wù)即會(huì)被銷毀。

我個(gè)人理解服務(wù)可以分為兩種, 前臺(tái) 和 后臺(tái) ,而 綁定 應(yīng)該是被當(dāng)作一種狀態(tài),因?yàn)?前臺(tái)服務(wù) 和 后臺(tái)服務(wù) 都可以進(jìn)行綁定。

基于這個(gè)理解,我們將限制分成了前臺(tái)和后臺(tái)兩個(gè)部分:

從 Android 5.0(API 級(jí)別 21)開始,如果使用隱式 Intent 調(diào)用 bindService() ,則系統(tǒng)會(huì)拋出異常。為確保應(yīng)用的安全性,在啟動(dòng) Service 時(shí),請(qǐng)始終使用顯式 Intent,且不要為服務(wù)聲明 Intent 過濾器。

在后臺(tái)中運(yùn)行的 Service 會(huì)消耗設(shè)備資源,這可能會(huì)降低用戶體驗(yàn)。 為了緩解這一問題,系統(tǒng)對(duì)這些 Service 施加了一些限制。

處于前臺(tái)時(shí),應(yīng)用可以自由創(chuàng)建和運(yùn)行前臺(tái)與后臺(tái) Service。

Android 8.0 開始:系統(tǒng)不允許后臺(tái)應(yīng)用創(chuàng)建后臺(tái) Service。否則該函數(shù)將引發(fā)一個(gè) IllegalStateException。

Android 8.0 開始:進(jìn)入后臺(tái)時(shí),在一個(gè)持續(xù)數(shù)分鐘的時(shí)間窗內(nèi),應(yīng)用仍可以創(chuàng)建和使用 Service。 在該時(shí)間窗結(jié)束后,應(yīng)用將被視為處于 空閑 狀態(tài)。 此時(shí),系統(tǒng)將停止應(yīng)用的后臺(tái) Service,就像應(yīng)用已經(jīng)調(diào)用 Service 的 Service.stopSelf() 方法一樣。

為了解除這種限制,可以使用 JobScheduler 作業(yè)替換后臺(tái) Service。

在 Android 8.0 之前,創(chuàng)建前臺(tái) Service 的方式通常是先創(chuàng)建一個(gè)后臺(tái) Service,然后將該 Service 推到前臺(tái)。

而在Android 8.0 之后,系統(tǒng)不允許后臺(tái)應(yīng)用創(chuàng)建后臺(tái) Service。

解決方案:調(diào)用 startForegroundService() ,以在前臺(tái)啟動(dòng)新 Service。

在系統(tǒng)創(chuàng)建 Service 后,應(yīng)用有五秒的時(shí)間來調(diào)用該 Service 的 startForeground() 方法以顯示新 Service 的用戶可見通知。 如果應(yīng)用在此時(shí)間限制內(nèi) 未 調(diào)用 startForeground() ,則系統(tǒng)將停止此 Service 并聲明此應(yīng)用為 ANR 。

前臺(tái)服務(wù)必須顯示優(yōu)先級(jí)為 PRIORITY_LOW 或更高的 狀態(tài)欄通知 ,這有助于確保用戶知道應(yīng)用正在執(zhí)行的任務(wù)。如果某操作不是特別重要,因而您希望使用最低優(yōu)先級(jí)通知,則可能不適合使用服務(wù);相反,您可以考慮使用 計(jì)劃作業(yè) 。

在 Android 9 (API 28)之后,使用前臺(tái)服務(wù)必須申請(qǐng) FOREGROUND_SERVICE 權(quán)限,否則會(huì)報(bào) SecurityException 。 這是普通權(quán)限,因此,系統(tǒng)會(huì)自動(dòng)為請(qǐng)求權(quán)限的應(yīng)用授予此權(quán)限。

每個(gè)運(yùn)行服務(wù)的應(yīng)用都會(huì)給系統(tǒng)帶來額外負(fù)擔(dān),從而消耗系統(tǒng)資源。如果應(yīng)用嘗試使用低優(yōu)先級(jí)通知隱藏其服務(wù),則可能會(huì)降低用戶正在主動(dòng)交互的應(yīng)用的性能。因此,如果某個(gè)應(yīng)用嘗試運(yùn)行擁有最低優(yōu)先級(jí)通知的服務(wù),則系統(tǒng)會(huì)在抽屜式通知欄的底部調(diào)用出該應(yīng)用的行為。

以 Android 12 為目標(biāo)平臺(tái)的應(yīng)用在后臺(tái)運(yùn)行時(shí)無法再啟動(dòng) 前臺(tái)服務(wù) 。

在 Android 11 及以后,系統(tǒng)對(duì)前臺(tái)服務(wù)何時(shí)可以訪問設(shè)備的位置、攝像頭或麥克風(fēng)進(jìn)行了限制。

如果您的應(yīng)用以 Android 11 或更高版本為目標(biāo)平臺(tái),且在前臺(tái)服務(wù)中訪問攝像頭或麥克風(fēng),則必須添加 前臺(tái)服務(wù)類型 camera 和 microphone 。

如果你的應(yīng)用 在后臺(tái)運(yùn)行時(shí)啟動(dòng)了某項(xiàng)前臺(tái)服務(wù) :

如果某服務(wù)的功能(位置、麥克風(fēng) 和 相機(jī))受到了限制,則Logcat中會(huì)打印如下語句:

android前臺(tái)服務(wù)以及通知

前臺(tái)服務(wù)是那些被認(rèn)為用戶知道(用戶認(rèn)可所認(rèn)可)且在系統(tǒng)內(nèi)存不足的時(shí)候 不允許系統(tǒng)殺死 的服務(wù)。前臺(tái)服務(wù) 必須給狀態(tài)欄提供一個(gè)通知 ,它被放到正在運(yùn)行(Ongoing)標(biāo)題之下——這就意味著 通知只有在這個(gè)服務(wù)被終止或從前臺(tái)主動(dòng)移除通知后才能被解除。

Notification支持文字內(nèi)容顯示、震動(dòng)、三色燈、鈴聲等多種提示形式,在默認(rèn)情況下,Notification僅顯示消息標(biāo)題、消息內(nèi)容、送達(dá)時(shí)間這3項(xiàng)內(nèi)容。

Notification:通知信息類,它里面對(duì)應(yīng)了通知欄的各個(gè)屬性。

NotificationManager : 狀態(tài)欄通知的管理類,負(fù)責(zé)發(fā)通知、清除通知等操作。

構(gòu)建通知的步驟:

更新通知

要想更新通知,需要利用 NotificationManager.notify()

的id參數(shù),該id在應(yīng)用內(nèi)需要唯一。要想更新特定id的通知,只需要?jiǎng)?chuàng)建新的Notification,并發(fā)出與之前所用 id 相同的 Notification。 如果之前的通知仍然可見,則系統(tǒng)會(huì)根據(jù)新的 Notification 對(duì)象的內(nèi)容更新該通知。相反,如果之前的通知已被清除,系統(tǒng)則會(huì)創(chuàng)建一個(gè)新通知。

刪除通知

刪除通知可以有多種方式:

1.通過 NotificationCompat.Builder 設(shè)置 setAutoCancel(true) ,這樣當(dāng)用戶點(diǎn)擊通知后,通知自動(dòng)刪除。

2.通過 NotificationManager.cancel(id) 方法,刪除指定 id 的通知

3.通過 NotificationManager.cancelAll() 方法,刪除該應(yīng)用的所有通知

關(guān)于前臺(tái)服務(wù)和通知更具體的內(nèi)容可參考 紫豪

Android基礎(chǔ):Service —— 默默為你服務(wù)

Service有兩種啟動(dòng)方式,分別為 context.startService() 和 context.bindService() 。這里要提到Service的生命周期,兩種不同的啟動(dòng)方式有不同的生命周期:

Tips:

首先創(chuàng)建自己的Service類,重寫其生命周期,并在mainfest.xml中進(jìn)行注冊(cè)。

必須注冊(cè)Service,不然不會(huì)調(diào)用。簡(jiǎn)單注冊(cè):

補(bǔ)充下Service在manifest中的屬性以及作用:

接下來,我們就可以用下面的兩個(gè)方法來啟動(dòng)和停止服務(wù)。

首先在我們的Activity中創(chuàng)建Service連接對(duì)象,重寫連接和斷開的方法。創(chuàng)建自定義的Binder對(duì)象,在 onServiceConnected() 中賦值然后可以調(diào)用自定義Binder中的方法。使用下方的bind()方法來綁定服務(wù),使用 unBind() 來解綁服務(wù)。

這里會(huì)用到Service的 onBind() 和 onUnbind() 的生命周期,我們?cè)赥estService中重寫之。這里要注意的是,使用bindService()方法啟動(dòng)的Service,不會(huì)調(diào)用 onStartCommand() 的生命周期。此外,創(chuàng)建自定義Binder類和對(duì)象。

這樣,當(dāng)我們使用Activity中的bind()方法來綁定服務(wù),會(huì)自動(dòng)啟動(dòng)服務(wù),而我們又重寫了 onServiceConnected() 方法并使用myBinder來調(diào)用方法。這樣我們就可以用它來Activity和Service來進(jìn)行通信。

特別Tips:

如果先使用 startService() 來開啟服務(wù)和 bindService() 來綁定服務(wù),當(dāng)使用 unbindService() 解綁時(shí),Service并不會(huì)被銷毀。而是使用 stopService() 才能銷毀服務(wù)。

前臺(tái)服務(wù)和后臺(tái)服務(wù)的區(qū)別:

在Service中進(jìn)行操作,將服務(wù)類型以前臺(tái)的方式運(yùn)行顯示在通知欄。

運(yùn)行效果:

暫時(shí)引用吧,有空再實(shí)現(xiàn)一個(gè):

參考資料:

Android中服務(wù)service

本文原文連接

Service是Android中的四大組件之一,它的級(jí)別和Activity差不多。只不過Service沒有頁面顯示,只能后臺(tái)運(yùn)行,可以和其他組件進(jìn)行交互。

Service的后臺(tái)運(yùn)行并不是子線程,是在主線程中進(jìn)行的,只是它沒有界面顯示。如果Service進(jìn)行了耗時(shí)操作同樣需要開啟子線程,否則會(huì)跟Activity一樣出現(xiàn)ANR問題(application not response–程序沒有響應(yīng))。

補(bǔ)充說明:

主線程的內(nèi)容包括UI和后臺(tái),只要程序中的UI或者后臺(tái)其中一個(gè)在跑,程序都算是在運(yùn)行狀態(tài)。

1,創(chuàng)建一個(gè)自己的TestService繼承Service

2,必須實(shí)現(xiàn)重寫其中的onBind方法,可以在里邊做各種操作,也可以接收傳遞過來的Intent的數(shù)據(jù)。

(在Android Studio中可以直接新建一個(gè)Service)

服務(wù)的注冊(cè)是四大組件中最簡(jiǎn)單的一個(gè),一般只要設(shè)置name屬性就可以了。

1,startService()啟動(dòng)

(1)啟動(dòng)服務(wù)startService:onCerate(),onStart()

(2)停止服務(wù)stopService:onDestroy()

此方法啟動(dòng)服務(wù),服務(wù)如果未被創(chuàng)建,系統(tǒng)會(huì)先調(diào)用onCreate()方法,接著調(diào)用onStrat()方法。如果調(diào)用startService前服務(wù)已經(jīng)被啟動(dòng),多次調(diào)用啟動(dòng)方法,不會(huì)多次調(diào)用onCreate,但會(huì)導(dǎo)致多次調(diào)用onStrat。

2,bindService()啟動(dòng)

(1)綁定bindService:onCreate(),onBind()

(2)解除綁定unbindService:onUnbind()

(3)正常停止程序服務(wù)的方法是先接觸綁定unbindService,在停止服務(wù)stopService

綁定后調(diào)用stopService方法,這時(shí)候是不能停止服務(wù)的,如果這時(shí)再調(diào)用解綁unbindService,程序會(huì)先解綁,后停止服務(wù)。

用此方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),會(huì)先調(diào)用onCreate(),接著調(diào)用onBind()方法,這時(shí)候調(diào)用者和服務(wù)綁定在一起,調(diào)用者退出,系統(tǒng)會(huì)先調(diào)用服務(wù)的onUnbind(),然后onDestroy()。如果調(diào)用bindService之前服務(wù)已經(jīng)被綁定,多次調(diào)用bindService并不會(huì)導(dǎo)致onCreate()和onBind()方法被多次調(diào)用。如果調(diào)用者想與正在綁定的服務(wù)解除綁定,可以調(diào)用unbindService()。

(1),onCerate()服務(wù)第一次被創(chuàng)建

(2),onStartComand()服務(wù)開始工作

(3),onBind()服務(wù)已經(jīng)綁定

(4),onUnBind()服務(wù)解綁

(5),onDestroy()服務(wù)已經(jīng)停止

普通的Service進(jìn)行耗時(shí)操作要?jiǎng)?chuàng)建一個(gè)線程去完成,因?yàn)閟ervice是在主線程運(yùn)行的,并且這個(gè)子線程完成工作要手動(dòng)停止 。IntentService是繼承了Service并處理起步請(qǐng)求的一個(gè)類,在IntentService內(nèi)有一個(gè)工作線程,來處理耗時(shí)操作,啟動(dòng)IntentService的方式和啟動(dòng)傳統(tǒng)的Service是一樣,當(dāng)任務(wù)執(zhí)行完成后,IntentService會(huì)自動(dòng)停止,而不需要我們?nèi)タ刂啤?/p>

可以啟動(dòng)多次IntentService,每一個(gè)耗時(shí)操作會(huì)以工作隊(duì)列的方式在IntentService的onHandleIntent回調(diào)方法中執(zhí)行,并且每次只會(huì)執(zhí)行一個(gè)工作線程,執(zhí)行完第一個(gè)再執(zhí)行第二個(gè),以此類推,而且,所有請(qǐng)求都在一個(gè)單線程中,不會(huì)阻塞主線程,同一時(shí)間只處理一個(gè)請(qǐng)求。

IntentService優(yōu)點(diǎn)

1,省去了在Service中開線程的麻煩

2,當(dāng)操作完成時(shí),不用手動(dòng)停止Service。IntentService是Service,但是比Service更智能。

當(dāng)前題目:android服務(wù),android服務(wù)的生命周期
標(biāo)題來源:http://chinadenli.net/article34/dsiohpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序外貿(mào)建站定制網(wǎng)站外貿(mào)網(wǎng)站建設(shè)網(wǎng)站改版網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化