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

android后臺服務(wù)的簡單介紹

android后臺服務(wù)保持,不被殺死

作者:閉關(guān)寫代碼

創(chuàng)新互聯(lián)專注于呼圖壁網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供呼圖壁營銷型網(wǎng)站建設(shè),呼圖壁網(wǎng)站制作、呼圖壁網(wǎng)頁設(shè)計、呼圖壁網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造呼圖壁網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供呼圖壁網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

鏈接:

來源:知乎

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

強烈建議不要這么做,不僅僅從用戶角度考慮,作為Android開發(fā)者也有責(zé)任去維護(hù)Android的生態(tài)環(huán)境。現(xiàn)在很多Android開發(fā)工程師,主力機居然是iPhone而不是Android設(shè)備,感到相當(dāng)悲哀。

從技術(shù)角度概括一下現(xiàn)在普遍的防殺方法

Service設(shè)置成START_STICKY,kill 后會被重啟(等待5秒左右),重傳Intent,保持與重啟前一樣

通過 startForeground將進(jìn)程設(shè)置為前臺進(jìn)程,做前臺服務(wù),優(yōu)先級和前臺應(yīng)用一個級別,除非在系統(tǒng)內(nèi)存非常缺,否則此進(jìn)程不會被 kill

雙進(jìn)程Service:讓2個進(jìn)程互相保護(hù),其中一個Service被清理后,另外沒被清理的進(jìn)程可以立即重啟進(jìn)程

QQ黑科技:在應(yīng)用退到后臺后,另起一個只有 1 像素的頁面停留在桌面上,讓自己保持前臺狀態(tài),保護(hù)自己不被后臺清理工具殺死

在已經(jīng)root的設(shè)備下,修改相應(yīng)的權(quán)限文件,將App偽裝成系統(tǒng)級的應(yīng)用(Android4.0系列的一個漏洞,已經(jīng)確認(rèn)可行)

Android系統(tǒng)中當(dāng)前進(jìn)程(Process)fork出來的子進(jìn)程,被系統(tǒng)認(rèn)為是兩個不同的進(jìn)程。當(dāng)父進(jìn)程被殺死的時候,子進(jìn)程仍然可以存活,并不受影響。鑒于目前提到的在Android-Service層做雙守護(hù)都會失敗,我們可以fork出c進(jìn)程,多進(jìn)程守護(hù)。死循環(huán)在那檢查是否還存在,具體的思路如下(Android5.0以下可行)

用C編寫守護(hù)進(jìn)程(即子進(jìn)程),守護(hù)進(jìn)程做的事情就是循環(huán)檢查目標(biāo)進(jìn)程是否存在,不存在則啟動它。

在NDK環(huán)境中將1中編寫的C代碼編譯打包成可執(zhí)行文件(BUILD_EXECUTABLE)。

主進(jìn)程啟動時將守護(hù)進(jìn)程放入私有目錄下,賦予可執(zhí)行權(quán)限,啟動它即可。

聯(lián)系廠商,加入白名單

------------------------------------------------------

TIP: 面對各種流氓軟件后臺常駐問題,建議使用“綠色守護(hù)”來解決,可是殺掉那些第三方清理工具難以清除的后臺程序

安卓手機的軟件是怎樣在后臺運行的?

安卓android后臺的軟件自動啟動程序 - 使用android手機必讀(精華中的精華)2011-08-25 16:06不用在意剩余內(nèi)存的大小,其實很多人都是把使用其他系統(tǒng)的習(xí)慣帶過來來了。android大多應(yīng)用沒有退出的設(shè)計其實是有道理的,這和系統(tǒng)對進(jìn)程的調(diào)度機制有關(guān)系。如果你知道java,就能更清楚這機制了。其實和java的垃圾回收機制類似,系統(tǒng)有一個規(guī)則來回收內(nèi)存。進(jìn)行內(nèi)存調(diào)度有個閥值,只有低于這個值系統(tǒng)才會按一個列表來關(guān)閉用戶不需要的東西。當(dāng)然這個值默認(rèn)設(shè)置得很小,所以你會看到內(nèi)存老在很少的數(shù)值徘徊。但事實上他并不影響速度。相反加快了下次啟動應(yīng)用的速度。這本來就是android標(biāo)榜的優(yōu)勢之一,如果人為去關(guān)閉進(jìn)程,沒有太大必要。特別是使用自動關(guān)進(jìn)程的軟件。(這里解決了大家非要關(guān)進(jìn)程的誤區(qū)!)

到這里有人會說了,那為什么內(nèi)存少的時候運行大型程序會慢呢?其實很簡單,在內(nèi)存剩余不多時打開大型程序,會觸發(fā)系統(tǒng)自身的調(diào)進(jìn)程調(diào)度策略,這是十分消耗系統(tǒng)資源的操作,特別是在一個程序頻繁向系統(tǒng)申請內(nèi)存的時候。這種情況下系統(tǒng)并不會關(guān)閉所有打開的進(jìn)程,而是選擇性關(guān)閉,頻繁的調(diào)度自然會拖慢系統(tǒng)。所以,論壇上有個更改內(nèi)存閥值的程序可以有一定改善。但改動也可能帶來一些問題,取決于值的設(shè)定。

那么,進(jìn)程管理軟件有無必要呢?有的。就是在運行大型程序之前,你可以手動關(guān)閉一些進(jìn)程釋放內(nèi)存,可以顯著的提高運行速度。但一些小程序,完全可交由系統(tǒng)自己管理。

談到這里,可能有的朋友會問,如果不關(guān)程序是不是會更耗電。我就說說android后臺的原理,你就明白了。android的應(yīng)用在被切換到后臺時,它其實已經(jīng)被暫停了,并不會消耗cpu資源,只保留了運行狀態(tài)。所以為什么有的程序切出去重進(jìn)會到主界面。但是,一個程序如果想要在后臺處理些東西,如音樂播放,它就會開啟一個服務(wù)。服務(wù)可在后臺持續(xù)運行,所以在后臺耗電的也只有帶服務(wù)的應(yīng)用了。這個在進(jìn)程管理軟件里能看到,標(biāo)簽是service。至于廣播什么的我就不涉及了。所以沒有帶服務(wù)的應(yīng)用在后臺是完全不耗電的,沒有必要關(guān)閉。這種設(shè)計本來就是一個非常好的設(shè)計,下次啟動程序時,會更快,因為不需要讀取界面資源,何必要關(guān)掉他們抹殺這個android的優(yōu)點呢?(告訴我們?nèi)绾魏侠硎褂眠M(jìn)程管理軟件)

還有一個,為什么android一個應(yīng)用看起來那么耗內(nèi)存。大家知道,android上的應(yīng)用是java,當(dāng)然需要虛擬機,而android上的應(yīng)用是帶有獨立虛擬機的,也就是每開一個應(yīng)用就會打開一個獨立的虛擬機。這樣設(shè)計的原因是可以避免虛擬機崩潰導(dǎo)致整個系統(tǒng)崩潰,但代價就是需要更多內(nèi)存。(跟塞班也不一樣,案桌不容易死機重啟)

以上這些設(shè)計確保了android的穩(wěn)定性,正常情況下最多單個程序崩潰,但整個系統(tǒng)不會崩潰,也永遠(yuǎn)沒有內(nèi)存不足的提示出現(xiàn)。大家可能是被windows毒害得太深了,總想保留更多的內(nèi)存,但實際上這并不一定會提升速度,相反卻喪失了程序啟動快的這一系統(tǒng)特色,很沒必要。大家不妨按我說的習(xí)慣來用用這個系統(tǒng)。

Android O 后臺服務(wù)限制

谷歌剛剛發(fā)布了Android O技術(shù)預(yù)覽版,為了提升續(xù)航和減少耗電,Android進(jìn)一步限制了后臺服務(wù)的運行。本文將為大家介紹Android O新增的后臺服務(wù)限制,翻譯自Android O開發(fā)者博客,原文在 這里 。

當(dāng)應(yīng)用在后臺運行時,仍然會占用系統(tǒng)的內(nèi)存。如果在后臺運行的應(yīng)用比較多,并且用戶正在玩游戲或者看視頻的時候,那么很容易會導(dǎo)致系統(tǒng)卡頓。為了提升用戶體驗,Android O增加了對后臺應(yīng)用的限制。這篇文章將介紹系統(tǒng)對后臺應(yīng)用運行的限制,以及開發(fā)者應(yīng)該如果修改應(yīng)用以適應(yīng)這個限制。

在Android系統(tǒng)中,很多應(yīng)用和服務(wù)是可以同時運行的。比如說,用戶可以在一個窗口中玩游戲,在另一個窗口中瀏覽網(wǎng)頁,同時使用第三個應(yīng)用來聽音樂。同時運行的應(yīng)用越多,系統(tǒng)的負(fù)載就越大。如果又有其他的應(yīng)用或者服務(wù)在后臺運行的話,那么又會增加系統(tǒng)的負(fù)載,最后導(dǎo)致系統(tǒng)卡頓,影響到用戶體驗,比如正在播放的音樂會突然停止。

為了減少系統(tǒng)卡頓,Android O限制那些用戶不再直接交互應(yīng)用的運行。針對targetSdkVersion是Android O的應(yīng)用,Android增加了以下兩種方式的限制:

大多數(shù)情況下,應(yīng)用可以使用 JobScheduler 的Jobs來繞開上述的限制。即使應(yīng)用沒有處于運行狀態(tài),應(yīng)用可以安排 JobScheduler 的Jobs來執(zhí)行什么工作,系統(tǒng)會在不影響用戶體驗的情況下,調(diào)度這些Jobs的運行。

后臺服務(wù)會占用系統(tǒng)資源,這個會導(dǎo)致糟糕的用戶體驗。為了解決這個問題,Android O對應(yīng)用的后臺服務(wù)增加了一堆的限制。注意這些限制僅僅是針對targetSdkVersion為Android O的應(yīng)用,targetSdkVersion為25或者以下的應(yīng)用不受影響。

系統(tǒng)會區(qū)分前臺和后臺應(yīng)用。當(dāng)滿足以下任意一個條件時,系統(tǒng)判定應(yīng)用是前臺的:

以上條件都不滿足,那么應(yīng)用就被系統(tǒng)認(rèn)為是后臺應(yīng)用。

前臺應(yīng)用可以自由地運行前臺和后臺服務(wù)。當(dāng)應(yīng)用進(jìn)入后臺之后,它仍然有幾分鐘的時間窗口來啟動和運行服務(wù)。當(dāng)這個時間窗口到期時,應(yīng)用就進(jìn)入空閑狀態(tài),系統(tǒng)將停止應(yīng)用的后臺服務(wù)運行,這個操作和服務(wù)的 Service.stopSelf() 方法被調(diào)用類似。

某些情況下,后臺應(yīng)用會被臨時加入到白名單中運行幾分鐘。應(yīng)用在白名單中時,它可以啟動服務(wù)而不受限制,并且后臺服務(wù)也被運行。當(dāng)需要處理對用戶可見的任務(wù)時,應(yīng)用將被添加到白名單中,比如:

大多數(shù)時候,你的應(yīng)用都可以用 JobScheduler 替換掉后臺服務(wù)。比如,CoolPhotoApp需要檢查用戶是否接收到好友分享的圖片,即使應(yīng)用不在前臺運行。按照之前的做法,應(yīng)用需要使用后臺服務(wù)去執(zhí)行這個任務(wù)。升級到Android O后,開發(fā)者需要用按一定周期運行的Job替換掉后臺服務(wù)來執(zhí)行,查詢服務(wù)器,完成后退出。

在Android O之前,創(chuàng)建一個前臺服務(wù)的通常做法是先創(chuàng)建一個后臺服務(wù),然后將其提升到前臺 。但這個做法到了Android O已經(jīng)失效了。Android O提供了另外一個方法[ NotificationManager.startServiceInForeground() ]( (android.content.Intent , int, android.app.Notification)),來創(chuàng)建前臺服務(wù)。用這個方法創(chuàng)建的新服務(wù)永遠(yuǎn)不會進(jìn)入后臺,所以不會受到后臺服務(wù)的運行限制。

如果應(yīng)用注冊了廣播,那么只要有廣播發(fā)送,應(yīng)用的廣播接收器就會自動運行,占用系統(tǒng)資源。當(dāng)很多應(yīng)用都注冊了某個系統(tǒng)事件廣播時,那么就會出現(xiàn)性能問題,因為當(dāng)系統(tǒng)事件觸發(fā)廣播時所有的應(yīng)用的接收器在很短的時間內(nèi)都會被順序運行,這樣就會影響用戶體驗。為了解決這個問題,Android 7.0增加了對廣播的限制。Android O進(jìn)一步加強了這個限制。

大多數(shù)情況下,應(yīng)用之前注冊的隱式廣播可以用功能類似的 JobScheduler 的job替代。比如,一個社交圖片類- -應(yīng)用經(jīng)常會在設(shè)備充電時,清除使用過程中產(chǎn)生的數(shù)據(jù)。該應(yīng)用會在Manifest注冊ACTION_POWER_CONNECTED廣播,當(dāng)接收到這個廣播是,執(zhí)行清理的工作。升級到Android O時,應(yīng)用需要刪除注冊的這個廣播,然后使用一個清理的job,這個job會在設(shè)備空閑并且充電時自動觸發(fā)執(zhí)行。

有一部分隱式廣播是不受這個限制的,應(yīng)用可以繼續(xù)在Manifest中注冊使用,不管應(yīng)用的targetSdkVersion是多少。這部分不受限制的廣播,可以查看 Implicit Broadcast Exceptions 。

上面介紹的這些變化不會影響到targetSdkVersion是25或者以下的應(yīng)用 。但是如果應(yīng)用是targetSdkVersion是Android O對應(yīng)的API級別,需要修改應(yīng)用以遵守這些新的限制。

如果應(yīng)用在空閑狀態(tài)仍然在運行后臺服務(wù),那么你需要替換掉這些后臺服務(wù)。可以采用如下的方案:

檢查在Manifest注冊的廣播,替換掉隱式廣播:

Android 服務(wù)的限制

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

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

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

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

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

基于這個理解,我們將限制分成了前臺和后臺兩個部分:

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

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

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

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

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

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

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

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

解決方案:調(diào)用 startForegroundService() ,以在前臺啟動新 Service。

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

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

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

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

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

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

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

如果你的應(yīng)用 在后臺運行時啟動了某項前臺服務(wù) :

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

android 怎樣啟動后臺服務(wù)

后臺服務(wù)就是后臺運行的意思,只要單擊任務(wù)欄上代表這程序的按鈕,原來后臺運行的程序就會到前臺來,前臺運行的程序就會到后臺去了。如下圖所示。

Windows 7可以打開幾個窗口,每個任務(wù)分配一個窗口,各個窗口可以重疊、排開、放大、縮小、移動等,可以方便地在各打開的窗口間切換,各個打開的應(yīng)用程序共享電腦資源,多任務(wù)環(huán)境對用戶是透明的,每個任務(wù)都可以按前臺、后臺和獨占三種方式進(jìn)行。

多任務(wù)并存時,打開一個窗口后,在任務(wù)欄的空白處單擊鼠標(biāo)右鍵,然后在彈出的快捷菜單中可以選擇層疊、橫向平鋪或縱向平鋪等。

當(dāng)Windows 7打開了幾個窗口時,實際上只有一個是你可以對它進(jìn)行操作的窗口,叫做當(dāng)前活動窗口。在所有打開窗口的最前面,標(biāo)題欄底色為深色的窗口為當(dāng)前活動窗口。單擊任務(wù)欄上的按鈕,或按下?lián)Q檔鍵加制表鍵,即可以把這個窗口切換為當(dāng)前活動窗口。

任何已經(jīng)打開,不在前臺運行的窗口,在后臺仍然是活動的,占用內(nèi)存和中央處理器等系統(tǒng)資源,所以,從這個意義上來說,長時間不用的窗口要及時關(guān)閉,方法是單擊應(yīng)用程序窗口標(biāo)題欄右上角的關(guān)閉按鈕。

;一個應(yīng)用程序,無論是否最小化,在任務(wù)欄上都會以按鈕的形式顯示出來,當(dāng)前活動窗口的應(yīng)用程序的按鈕呈凹陷形狀,其余呈隆起形狀。因此,判斷一個窗口是否關(guān)閉,只要看其是否還在任務(wù)欄中即可。

分享名稱:android后臺服務(wù)的簡單介紹
網(wǎng)站網(wǎng)址:http://chinadenli.net/article26/dsdcpjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)站設(shè)計定制網(wǎng)站手機網(wǎng)站建設(shè)網(wǎng)站排名虛擬主機

廣告

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

成都定制網(wǎng)站網(wǎng)頁設(shè)計