一、確保Android Service持續(xù)后臺(tái)運(yùn)行的方法
Service的重要性及其挑戰(zhàn)
在Android開發(fā)中,Service組件作為后臺(tái)服務(wù),經(jīng)常需要持續(xù)運(yùn)行以處理各種關(guān)鍵任務(wù)。面臨一些安全軟件的進(jìn)程結(jié)束功能,我們必須采取措施確保Service的持久運(yùn)行。
利用系統(tǒng)廣播進(jìn)行自我保護(hù)

為了確保Service的持續(xù)運(yùn)行,我們可以借助Android的系統(tǒng)廣播機(jī)制。這一機(jī)制是常駐程序的一部分,不容易受到其他軟件的干擾。通過(guò)系統(tǒng)廣播,我們可以觸發(fā)程序以檢查Service的運(yùn)行狀態(tài)。
當(dāng)Service被意外結(jié)束時(shí),系統(tǒng)廣播將通知我們的程序,進(jìn)而重新啟動(dòng)Service,確保其持續(xù)運(yùn)行。
選擇Intent.ACTION_TIME_TICK廣播
在眾多系統(tǒng)廣播中,我們選擇使用Intent.ACTION_TIME_TICK廣播。這個(gè)廣播每分鐘發(fā)送一次,正好可以用于每分鐘檢查一次Service的運(yùn)行狀態(tài)。若Service被結(jié)束,便可立即重新啟動(dòng)。
關(guān)于Intent.ACTION_TIME_TICK的使用細(xì)節(jié)
開發(fā)人員需要了解,廣播的注冊(cè)分為靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)兩種方式。對(duì)于Intent.ACTION_TIME_TICK這個(gè)系統(tǒng)廣播,只能通過(guò)動(dòng)態(tài)注冊(cè)的方式使用。
這意味著我們不能再通過(guò)manifest.xml文件進(jìn)行注冊(cè)。相反,我們需要在代碼中通過(guò)registerReceiver()方法進(jìn)行注冊(cè)。這樣的做法更加靈活,能更好地適應(yīng)Service的自我保護(hù)需求。
總結(jié)
通過(guò)上述方法,我們可以有效地利用Android的系統(tǒng)廣播機(jī)制,確保Service在面臨安全軟件進(jìn)程結(jié)束功能時(shí)仍能持續(xù)運(yùn)行。這是一種基于系統(tǒng)機(jī)制的自我保護(hù)策略,有助于提高應(yīng)用程序的穩(wěn)定性和可靠性。
注意事項(xiàng)
在實(shí)際應(yīng)用中,除了上述方法外,還需要注意處理異常情況、優(yōu)化資源使用以及考慮用戶體驗(yàn)等方面的問題。確保在保障Service持續(xù)運(yùn)行的不影響用戶的正常體驗(yàn)。

一、廣播注冊(cè)
在ThisApp的Application類中,我們首先進(jìn)行廣播的注冊(cè)。目標(biāo)是監(jiān)聽時(shí)間變化相關(guān)的廣播:
通過(guò)創(chuàng)建一個(gè)新的IntentFilter對(duì)象,指定我們想要接收的廣播動(dòng)作——時(shí)間變化(Intent.ACTION_TIME_TICK)。接著實(shí)例化一個(gè)MyBroadcastReceiver對(duì)象,并將其注冊(cè)到系統(tǒng)中以接收相關(guān)廣播。
二、廣播接收器的onReceive方法

通過(guò)判斷接收到的Intent中的Action是否為Intent.ACTION_TIME_TICK來(lái)確定是否進(jìn)行Service狀態(tài)的檢查。這是因?yàn)樵谔囟〞r(shí)間間隔內(nèi)觸發(fā)的時(shí)間變化廣播有助于我們追蹤和檢查后臺(tái)服務(wù)的運(yùn)行狀態(tài)。
三、Service的檢查與啟動(dòng)
為了檢查特定Service是否正在運(yùn)行,我們創(chuàng)建一個(gè)標(biāo)志變量isServiceRunning并初始化為false。通過(guò)獲取ActivityManager實(shí)例并遍歷當(dāng)前運(yùn)行的服務(wù)信息來(lái)檢查我們的WidgetUpdateService是否正在運(yùn)行。如果找到正在運(yùn)行的Service實(shí)例,則將isServiceRunning設(shè)置為true。
如果服務(wù)未運(yùn)行,我們需要啟動(dòng)它。創(chuàng)建一個(gè)指向WidgetUpdateService的Intent對(duì)象,并使用context的startService方法來(lái)啟動(dòng)服務(wù)。這樣,即使在設(shè)備重啟或一段時(shí)間未使用的情況下,我們的服務(wù)也能自動(dòng)啟動(dòng)并繼續(xù)運(yùn)行。
四、開機(jī)啟動(dòng)的實(shí)現(xiàn)

理論上,我們可以通過(guò)系統(tǒng)開機(jī)廣播來(lái)啟動(dòng)Service,但考慮到我們已經(jīng)有了上述的服務(wù)狀態(tài)檢查機(jī)制,實(shí)際上并不需要額外的開機(jī)啟動(dòng)設(shè)置。因?yàn)槊扛粢欢螘r(shí)間(通過(guò)時(shí)間變化的廣播),我們都會(huì)檢查并啟動(dòng)Service,確保它始終在運(yùn)行。
五、總結(jié)
一、響應(yīng)啟動(dòng)并完成引導(dǎo)的代碼邏輯
當(dāng)設(shè)備完成啟動(dòng)引導(dǎo)后,系統(tǒng)會(huì)發(fā)送一個(gè)帶有特定動(dòng)作的Intent。在這段代碼中,我們正在檢查這個(gè)動(dòng)作是否為“系統(tǒng)啟動(dòng)完成”。一旦確認(rèn),就會(huì)啟動(dòng)一個(gè)服務(wù)——LogService。具體實(shí)現(xiàn)如下:
```java

if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, LogService.class);
context.startService(i);
}
```

二、關(guān)于Android后臺(tái)服務(wù)保持與防殺策略
作者:閉關(guān)寫代碼
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
對(duì)于如何確保Android后臺(tái)服務(wù)不被的問題,從技術(shù)角度存在一些普遍的策略。但強(qiáng)烈建議開發(fā)者不要這么做,因?yàn)檫@既不符合用戶體驗(yàn),也違背了Android的生態(tài)環(huán)境原則。很多Android開發(fā)工程師更傾向于使用iPhone而非Android設(shè)備,這反映出某種悲哀的現(xiàn)狀。

那么,現(xiàn)有的防殺策略有哪些呢?
1. Service設(shè)置為START_STICKY,服務(wù)被后會(huì)嘗試重啟,并在等待大約5秒后重新發(fā)送Intent以保持狀態(tài)。
2. 通過(guò)startForeground將進(jìn)程設(shè)置為前臺(tái)進(jìn)程,這樣可以提高服務(wù)的優(yōu)先級(jí),除非系統(tǒng)內(nèi)存極度不足,否則此進(jìn)程一般不會(huì)被。
3. 雙進(jìn)程Service:通過(guò)兩個(gè)進(jìn)程互相保護(hù),當(dāng)一個(gè)被清理時(shí),另一個(gè)可以重啟進(jìn)程。
4. QQ的黑科技:應(yīng)用退到后臺(tái)后,通過(guò)保持一個(gè)只有1像素的頁(yè)面在桌面上顯示來(lái)保持前臺(tái)狀態(tài),防止被后臺(tái)清理工具。

5. 在已root的設(shè)備上,修改權(quán)限文件,讓應(yīng)用偽裝成系統(tǒng)級(jí)應(yīng)用(針對(duì)Android 4.0系列的一個(gè)漏洞)。
6. 利用Android系統(tǒng)中的fork機(jī)制,創(chuàng)建子進(jìn)程來(lái)避免被系統(tǒng)清理。當(dāng)主進(jìn)程被時(shí),子進(jìn)程仍然可以運(yùn)行。
7. 使用C編寫守護(hù)進(jìn)程,在主進(jìn)程中循環(huán)檢查目標(biāo)進(jìn)程是否在運(yùn)行。如果不運(yùn)行則啟動(dòng)它(適用于Android 5.0以下版本)。
還可以嘗試聯(lián)系設(shè)備廠商,將應(yīng)用加入系統(tǒng)的白名單以獲取特殊保護(hù)。然而面對(duì)流氓軟件后臺(tái)常駐問題,推薦使用“綠色守護(hù)”這樣的工具來(lái)解決。它可以有效地殺掉那些難以清除的后臺(tái)程序。不過(guò)作為開發(fā)者,有責(zé)任考慮用戶體驗(yàn)和系統(tǒng)生態(tài)的平衡。過(guò)度追求后臺(tái)常駐可能損害用戶體驗(yàn)并引發(fā)其他問題。
三、iOS和Android的后臺(tái)推送原理及其區(qū)別

iOS和Android的后臺(tái)推送機(jī)制存在一些區(qū)別。對(duì)于iOS而言,其推送機(jī)制主要通過(guò)Apple的Push Notification服務(wù)實(shí)現(xiàn)。而對(duì)于Android來(lái)說(shuō),主要通過(guò)其自家的Push Notification Service或者第三方推送服務(wù)如Firebase實(shí)現(xiàn)。主要的區(qū)別在于兩者的操作系統(tǒng)環(huán)境和權(quán)限管理策略不同導(dǎo)致的實(shí)現(xiàn)方式上的差異。具體的原理和區(qū)別需要結(jié)合兩者系統(tǒng)的特性和API設(shè)計(jì)進(jìn)行深入研究和分析。iOS推送機(jī)制深度解析
一、iOS的推送機(jī)制概述
iOS在系統(tǒng)級(jí)別擁有一個(gè)使用5223端口的推送服務(wù)程序。這一端口所使用的協(xié)議源于Jabber,后發(fā)展為XMPP,這一協(xié)議在GTalk等IM軟件中得到廣泛應(yīng)用??梢院?jiǎn)潔地理解,iOS的推送是蘋果服務(wù)器通過(guò)手機(jī)后臺(tái)向一個(gè)IM服務(wù)程序發(fā)送的消息。
二、iOS推送的技術(shù)特點(diǎn)
系統(tǒng)根據(jù)接收到的IM消息,識(shí)別并告知具體哪個(gè)Apps發(fā)生了何事,然后分別通知這些Apps。雖然這種方式在技術(shù)上并無(wú)太多創(chuàng)新,但其整體架構(gòu)卻十分出色。主要優(yōu)點(diǎn)如下:

1. 使用久經(jīng)考驗(yàn)的協(xié)議,技術(shù)風(fēng)險(xiǎn)小。
2. 蘋果勇于承擔(dān)責(zé)任,維護(hù)著代價(jià)不菲的服務(wù)器集群,并對(duì)服務(wù)器的穩(wěn)定運(yùn)行負(fù)責(zé)。
這種技術(shù)選擇減少了Bug的出現(xiàn),減輕了用戶的困擾。而蘋果的責(zé)任擔(dān)當(dāng),盡可能地減少了不可控的意外,保證了用戶的使用體驗(yàn)。
三、iOS推送的優(yōu)勢(shì)
帶給用戶的好處實(shí)在而多樣。其安全性高,只有登錄過(guò)的開發(fā)者才能通過(guò)蘋果服務(wù)器進(jìn)行推送。其推送服務(wù)快速、穩(wěn)定、可靠,因?yàn)樘O果掌控著推送服務(wù)器和操作系統(tǒng)。使用這種方式更省電,并且讓整個(gè)系統(tǒng)的體驗(yàn)更加統(tǒng)一和簡(jiǎn)單。比如,用戶無(wú)需擔(dān)心因App后臺(tái)運(yùn)行而導(dǎo)致的電量消耗,也不用擔(dān)心因App被結(jié)束而導(dǎo)致接收不到推送消息的問題。

四、開發(fā)的便捷性
對(duì)于開發(fā)者來(lái)說(shuō),雖然仍需要維護(hù)服務(wù)器等事項(xiàng),但整體開發(fā)難度已大大降低。
五、Android的推送機(jī)制與對(duì)比
Android系統(tǒng)中,Apps掛后臺(tái)一直是一項(xiàng)引以為豪的特性。在技術(shù)選擇上,眾多Apps選擇掛后臺(tái)等待推送。Google后來(lái)也提供了類似蘋果的推送方式。在技術(shù)創(chuàng)新上,蘋果的推送機(jī)制并無(wú)太多特別之處,但其在系統(tǒng)整合和用戶體驗(yàn)上的把控,仍使其占據(jù)了優(yōu)勢(shì)。
而對(duì)于用戶而言,Android系統(tǒng)的推送機(jī)制可能存在一些問題。Apps的開發(fā)者不會(huì)站在系統(tǒng)層面進(jìn)行考慮,可能會(huì)導(dǎo)致某些Apps在接收推送后表現(xiàn)不夠優(yōu)化,從而影響到用戶的電池使用效率。而Google的方案雖然也有其優(yōu)點(diǎn),如靈活性更高,但在系統(tǒng)整合和用戶體驗(yàn)方面可能不如蘋果。

無(wú)論是iOS還是Android,都在不斷地優(yōu)化其推送機(jī)制,以更好地服務(wù)用戶。而背后的技術(shù)實(shí)現(xiàn)和架構(gòu)選擇,都是為了讓用戶享受到更好的體驗(yàn)。章節(jié)一:Line應(yīng)用的差異化功能
Line的Android版本與iOS版本的功能差異
在當(dāng)今的通訊軟件市場(chǎng)中,Line以其獨(dú)特的功能和跨平臺(tái)的兼容性贏得了廣大用戶的青睞。在推送通知方面,Line的Android版本具備在Popup上直接回復(fù)的功能,這一特點(diǎn)大大提升了用戶的使用便捷性。而對(duì)于iOS用戶來(lái)說(shuō),想要實(shí)現(xiàn)這一功能,往往需要通過(guò)越獄的方式。
章節(jié)二:封閉與強(qiáng)制的策略并非總是阻礙
封閉系統(tǒng)的雙刃劍效應(yīng)

在某些情況下,強(qiáng)制和封閉的策略并非壞事。當(dāng)一家公司在其產(chǎn)品上實(shí)施這樣的策略時(shí),實(shí)際上也在承擔(dān)一種責(zé)任——為產(chǎn)品的性能和安全性負(fù)責(zé)。這樣的決策意味著團(tuán)隊(duì)需要對(duì)每一項(xiàng)功能進(jìn)行深入的思考和細(xì)致的測(cè)試,確保它們對(duì)用戶的實(shí)際使用有所幫助。這種責(zé)任感是公司追求卓越、打破常規(guī)的重要驅(qū)動(dòng)力。
章節(jié)三:蘋果推送方案的獨(dú)特之處
蘋果的創(chuàng)新之處何在?
當(dāng)我們深入探討蘋果的推送方案時(shí),會(huì)發(fā)現(xiàn)其與眾不同的地方不僅僅在于技術(shù)層面。蘋果提供了一種超越技術(shù)本身的解決方案,這種方案愿意讓公司承擔(dān)更多的風(fēng)險(xiǎn)和責(zé)任。這種策略類似于BB的專用網(wǎng)絡(luò)或Kindle的全球3G解決方案,它們都在尋求一種更穩(wěn)定、更高效的與用戶溝通的方式。在這種思路下,蘋果的推送方案更像是一場(chǎng)大膽的嘗試和創(chuàng)新。
章節(jié)四:勇于承擔(dān)額外責(zé)任的價(jià)值觀

額外責(zé)任的背后
個(gè)人而言,我認(rèn)為這些所謂的“額外”責(zé)任其實(shí)是值得的。當(dāng)一個(gè)公司愿意為其產(chǎn)品的每一個(gè)細(xì)節(jié)負(fù)責(zé)時(shí),這不僅體現(xiàn)了其對(duì)用戶的尊重,也反映了其追求卓越的企業(yè)精神。這種責(zé)任感和創(chuàng)新精神是推動(dòng)公司持續(xù)發(fā)展的核心動(dòng)力。這種勇于承擔(dān)額外責(zé)任的策略有助于公司在競(jìng)爭(zhēng)激烈的市場(chǎng)中建立起堅(jiān)實(shí)的品牌形象。通過(guò)持續(xù)的創(chuàng)新和對(duì)用戶的深度關(guān)注,這樣的公司能夠贏得用戶的忠誠(chéng)度和信任。在這個(gè)過(guò)程中,每一個(gè)團(tuán)隊(duì)成員都會(huì)意識(shí)到他們的努力和責(zé)任對(duì)于公司的成功至關(guān)重要。這種團(tuán)隊(duì)精神和使命感會(huì)激發(fā)員工更加努力地工作,為公司創(chuàng)造更大的價(jià)值。而這也是任何一家想要長(zhǎng)久發(fā)展的公司都需要具備的核心素質(zhì)。雖然承擔(dān)這些額外的責(zé)任可能會(huì)帶來(lái)短期的挑戰(zhàn)和風(fēng)險(xiǎn),但從長(zhǎng)遠(yuǎn)來(lái)看,這種投入是值得的。它不僅提升了公司的競(jìng)爭(zhēng)力,也為用戶帶來(lái)了更好的體驗(yàn)和服務(wù)。同時(shí)這種責(zé)任也意味著對(duì)社會(huì)責(zé)任的擔(dān)當(dāng)和承諾這不僅僅是關(guān)于技術(shù)和產(chǎn)品的責(zé)任更是關(guān)于對(duì)社會(huì)和環(huán)境的影響的責(zé)任通過(guò)積極參與和承擔(dān)責(zé)任公司可以推動(dòng)社會(huì)的正向發(fā)展并贏得公眾的認(rèn)可和尊重。在這個(gè)過(guò)程中公司也能夠建立起與公眾之間的信任和聯(lián)系為未來(lái)的發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。因此我堅(jiān)信承擔(dān)起這些額外的責(zé)任不僅是值得的而且是我們這個(gè)時(shí)代企業(yè)和個(gè)人都應(yīng)該積極追求的目標(biāo)之一。只有這樣我們才能在競(jìng)爭(zhēng)激烈的市場(chǎng)中立足并持續(xù)發(fā)展下去。
章節(jié)五:結(jié)語(yǔ)
展望未來(lái)
從Line的差異化功能到蘋果的創(chuàng)新策略我們不難看出企業(yè)和產(chǎn)品的發(fā)展離不開對(duì)責(zé)任的承擔(dān)和對(duì)創(chuàng)新的追求。在這個(gè)日新月異的時(shí)代里只有不斷地創(chuàng)新并承擔(dān)起應(yīng)有的責(zé)任才能贏得用戶的信任和支持在競(jìng)爭(zhēng)激烈的市場(chǎng)中立足并持續(xù)發(fā)展下去。因此讓我們共同期待那些勇于承擔(dān)額外責(zé)任、追求創(chuàng)新的企業(yè)為我們帶來(lái)更多驚喜和更好的體驗(yàn)!
