導航:首頁 > 操作系統 > android不死服務

android不死服務

發布時間:2023-03-30 20:37:24

『壹』 android 怎麼做微信 QQ 那種殺不死的服務

在你的手機的後台管理哪裡選著永不殺除就可以了

『貳』 android 怎麼做微信 QQ 那種殺不死的服務

QQ微信也是可能被安敗哪虛全軟體殺掉進察燃程的
比如我的小米手機,長按home鍵一鍵緩擾消除,就什麼都幹掉了
但是,微信一會又會啟動了
其實原理很簡單
android上可以注冊幾個廣播,例如開機廣播,網路狀態監聽(信號變動都會觸發),鎖屏,解鎖等等
然後在廣播里啟動你的service就可以實現自動啟動了
但是很多手機可以設置禁止自啟

『叄』 android後台服務保持,不被殺死

作者:閉關寫代碼
鏈接:https://www.hu.com/question/29826231/answer/71207109
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

強烈建議不要這么做,不僅僅從用戶角度考慮,作為Android開發者也有責任去維護Android的生態環境。現在很多Android開發工程師,主力機居然是iPhone而不是Android設備,感到相當悲哀。
從技術角度概括一下現在普遍的防殺方法

Service設置成START_STICKY,kill 後會被重啟(等待5秒左右),重傳Intent,保持與重啟前一樣
通過 startForeground將進程設置為前台進程,做前台服務,優先順序和前台應用一個級別,除非在系統內存非常缺,否則此進程不會被 kill

雙進程Service:讓2個進程互相保護,其中一個Service被清理後,另外沒被清理的進程可以立即重啟進程
QQ黑科技:在應用退到後台後,另起一個只有 1 像素的頁面停留在桌面上,讓自己保持前台狀態,保護自己不被後台清理工具殺死
在已經root的設備下,修改相應的許可權文件,將App偽裝成系統級的應用(Android4.0系列的一個漏洞,已經確認可行)
Android系統中當前進程(Process)fork出來的子進程,被系統認為是兩個不同的進程。當父進程被殺死的時候,子進程仍然可以存活,並不受影響。鑒於目前提到的在Android-Service層做雙守護都會失敗,我們可以fork出c進程,多進程守護。死循環在那檢查是否還存在,具體的思路如下(Android5.0以下可行)
用C編寫守護進程(即子進程),守護進程做的事情就是循環檢查目標進程是否存在,不存在則啟動它。
在NDK環境中將1中編寫的C代碼編譯打包成可執行文件(BUILD_EXECUTABLE)。
主進程啟動時將守護進程放入私有目錄下,賦予可執行許可權,啟動它即可。
聯系廠商,加入白名單
------------------------------------------------------
TIP: 面對各種流氓軟體後台常駐問題,建議使用「綠色守護」來解決,可是殺掉那些第三方清理工具難以清除的後台程序

『肆』 android開發怎麼讓個推服務不被手機系統殺掉

1.在service中重寫下面的方法,這個方法有三個返回值,START_STICKY是service被kill掉後自動重寫創建[代碼]java代碼:@(Intentintent,intflags,intstartId){returnSTART_STICKY;}----------------@(Intentintent,intflags,intstartId){//TODOAuto-generatedmethodstubLog.v("TrafficService","startCommand");flags=START_STICKY;returnsuper.onStartCommand(intent,flags,startId);//returnSTART_REDELIVER_INTENT;}2.在Service的onDestroy()中重啟Service.publicvoidonDestroy(){IntentlocalIntent=newIntent();localIntent.setClass(this,MyService.class);//銷毀時重新啟動Servicethis.startService(localIntent);}用 管家殺掉進程的時候,調用的是系統自帶的強制kill功能(即settings里的),在kill時,會將應用的整個進程停掉,當然包括service在內,如果在running里將service強制kill掉,顯示進程還在。不管是kill整個進程還是只kill掉進應用的service,都不會重新啟動service。不知道你是怎麼實現重啟的,實在是不解。在eclipse中,用stop按鈕kill掉進程的時候,倒是會重啟serviceKILL問題:1.settings中stopserviceonDestroy方法中,調用startService進行Service的重啟。2.settings中forcestop應用捕捉系統進行廣播(action為android.intent.action.PACKAGE_RESTARTED)3.藉助第三方應用kill掉runningtask提升service的優先順序service開機啟動今天我們主要來探討android怎麼讓一個service開機自動啟動功能的實現。Android手機在啟動的過程中會觸發一個StandardBroadcastAction,名字叫android.intent.action.BOOT_COMPLETED(記得只會觸發一次呀),在這里我們可以通過構建一個廣播接收者來接收這個這個action.下面我就來簡單寫以下實現的步驟:第一步:首先創建一個廣播接收者,重構其抽象方法onReceive(Contextcontext,Intentintent),在其中啟動你想要啟動的Service或app。[代碼]java代碼:importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;{//重寫onReceive方法@OverridepublicvoidonReceive(Contextcontext,Intentintent){//後邊的XXX.class就是要啟動的服務Intentservice=newIntent(context,XXXclass);context.startService(service);Log.v("TAG","開機自動服務自動啟動..");//啟動應用,參數為需要自動啟動的應用的包名Intentintent=getPackageManager().getLaunchIntentForPackage(packageName);context.startActivity(intent);}}第二步:配置xml文件,在receiver接收這種添加intent-filter配置[代碼]java代碼:第三步:添加許可權如何實現一個不會被殺死的進程看Android的文檔知道,當進程長期不活動,或系統需要資源時,會自動清理門戶,殺死一些Service,和不可見的Activity等所在的進程。但是如果某個進程不想被殺死(如數據緩存進程,或狀態監控進程,或遠程服務進程),應該怎麼做,才能使進程不被殺死。addandroid:persistent="true".xml切記,這個不可濫用,系統中用這個的service,app一多,整個系統就完蛋了。目前系統中有phone等非常有限的,必須一直活著的應用在試用。提升service優先順序的方法Android系統對於內存管理有自己的一套方法,為了保障系統有序穩定的運信,系統內部會自動分配,控製程序的內存使用。當系統覺得當前的資源非常有限的時候,為了保證一些優先順序高的程序能運行,就會殺掉一些他認為不重要的程序或者服務來釋放內存。這樣就能保證真正對用戶有用的程序仍然再運行。如果你的Service碰上了這種情況,多半會先被殺掉。但如果你增加Service的優先順序就能讓他多留一會,我們可以用setForeground(true)來設置Service的優先順序。為什麼是foreground?默認啟動的Service是被標記為background,當前運行的Activity一般被標記為foreground,也就是說你給Service設置了foreground那麼他就和正在運行的Activity類似優先順序得到了一定的提高。當讓這並不能保證你得Service永遠不被殺掉,只是提高了他的優先順序。從Android1.5開始,一個已啟動的service可以調用startForeground(int,Notification)將service置為foreground狀態,調用stopForeground(boolean)將service置為background狀態。我們會在調用startForeground(int,Notification)傳入參數notification,它會在狀態欄里顯示正在進行的foregroundservice。backgroundservice不會在狀態欄里顯示。在Android1.0中,將一個service置為foreground狀態:setForeground(true);mNM.notify(id,notification);將一個service置為background狀態:mNM.cancel(id);setForeground(false);對比看出,在1.0API中調用setForeground(boolean)只是簡單的改變service的狀態,用戶不會有任何覺察。新API中強制將notification和改變service狀態的動作綁定起來,foregroundservice會在狀態欄顯示,而backgroundservice不會。Remoteservicecontroller&binding跨進程調用Service。暫時不研究。如何防止Android應用中的Service被系統回收?很多朋友都在問,如何防止Android應用中的Service被系統回收?下面簡單解答一下。對於Service被系統回收,一般做法是通過提高優先順序可以解決,在AndroidManifest.xml文件中對於intent-filter可以通過android:priority="1000"這個屬性設置最高優先順序,1000是最高值,如果數字越小則優先順序越低,同時實用於廣播,推薦大家如果你的應用很重要,可以考慮通過系統常用intentaction來觸發。

『伍』 怎麼讓 Android 程序一直後台運行,像 QQ 一樣不被殺死

1、首先要保證你的程序一直在於後台運行,也就是所謂和守護程序一樣,而且在任何認為kill和系統內存回收kill後,保證重啟。
2、獲取系統內部資源。
3、上報策略,間隔時間上報還是按月按天上報。
4、監測網路,當網路開啟的時候第一時間上報數據。
5、伺服器連接。
對於以上問題的解決:
1、利用廣播BroadcastReceiver監聽,當系統啟動時啟動服務service,監聽的action是
android.intent.action.BOOT_COMPLETED,當服務被kill時在onDestroy()再次啟動服務,在
onStartCommand()中 設置 flags = START_STICKY;return
super.onStartCommand(intent, flags, startId),保證服務重啟。
2、利用getPackageManager(),getInstalledPackages(),getApplicationInfo()來獲取系統安裝數據。
3、上報策略可以每天(時間間隔24小時),但是不是很准確,一般按日上報不做時間間隔這樣個人認為比較准確。
4、檢測開啟網路上報數據,還是利用廣播BroadcastReceiver監聽,監聽action為android.net.conn.CONNECTIVITY_CHANGE,當發現網路開啟時就觸發數據上報。
5、伺服器連接,如果你了解java熟悉java企業級開發,那麼你對httpclient並不陌生,很幸運的是android sdk已經集成了httpclient,那我們伺服器連接首選它了。

以上是我做的解決方案,你是否有更好的替代品,希望我只是拋了塊磚頭,後面你繼續。。。。

service被系統異常kill掉後回重啟。有以下值:

onStartCommand有三種返回值:
START_STICKY:sticky的意思是「粘性的」。使用這個返回值時,我們啟動的服務跟應用程序」粘」在一起,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務。當再次啟動服務時,傳入的第一個參數將為null;
START_NOT_STICKY:「非粘性的」。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。

『陸』 如何編寫android6.0服務被殺不死

Service簡介
Service段定間運行台用戶交互應用組件每Service必須manifest 通態州好聲明通contect.startservicecontect.bindserverice啟其應用組件運行進程主線程說service需要耗或者阻塞操作需要其線程實現(或者用系統提供IntentService繼承Service處理數據用自身新線程)【新線程startServiceServiceMainThread】跡猛

本服務 Local Service 用於應用程序內部
啟並運行直至停止或自停止種式調用Context.startService()啟調用Context.stopService()結束調用Service.stopSelf() 或 Service.stopSelfResult()自停止論調用少startService()需要調用stopService()停止服務
【用於實現應用程序自些耗任務比查詢升級信息並佔用應用程序比Activity所屬線程單線程台執行用戶體驗比較】

遠程服務 Remote Service 用於android系統內部應用程序間
通自定帆鉛義並暴露介面進行程序操作客戶端建立服務象連接並通連接調用服務連接調用Context.bindService()建立調用 Context.unbindService()關閉客戶端綁定至同服務服務沒載入bindService()先載入
【其應用程序復用比氣預報服務其應用程序需要再寫服務調用已即】

『柒』 Android 守護進程的實現方式

在我們進行應用開發時,會遇到上級的各種需求,其中有一條 剛需: 後台保活 ,更有甚者:

我要我們的應用永遠活在用戶的手機後台不被殺死 —— 這都 TM 的扯淡

除了系統級別的應用能持續運行,所有三方程序都有被殺死的那一天!當然 QQ/微信/陌陌 等會好一些,因為他們已經深入設備的 心 ;
我們能做的只是通過各種手段盡量讓我們的程序在後台運行的時間長一些,或者在被幹掉的時候,能夠重新站起來,而且這個也不是每次都有效的,也是不能在所有的設備的上都有效的;要做到後台進程保活,我們需要做到兩方便:

要實現實現上邊所說,通過下邊幾點來實現,首先我們需要了解下進程的優先順序劃分:

Process Importance 記錄在 ActivityManager.java 類中:

了解進程優先順序之後,我們還需要知道一個進程回收機制的東西;這里參考 AngelDevil 在博客園上的一篇文章:

Android 的 Low Memory Killer 基於 Linux 的 OOM 機制,在 Linux 中,內存是以頁面為單位分配的,當申請頁面分配時如果內存不足會通過以下流程選擇bad進程來殺掉從而釋放內存:

在 Low Memory Killer 中通過進程的 oom_adj 與佔用內存的大小決定要殺死的進程, oom_adj 越小越不容易被殺死;
Low Memory Killer Driver 在用戶空間指定了一組內存臨界值及與之一一對應的一組 oom_adj 值,當系統剩餘內存位於內存臨界值中的一個范圍內時,如果一個進程的 oom_adj 值大於或等於這個臨界值對應的 oom_adj 值就會被殺掉。

下邊是表示 Process State (即老版本里的 OOM_ADJ )數值對照表,數值越大,重要性越低,在新版SDK中已經在 android 層去除了小於0的進程狀態

Process State (即老版本的 OOM_ADJ )與 Process Importance 對應關系,這個方法也是在 ActivityManager.java 類中,有了這個關系,就知道可以知道我們的應用處於哪個級別,對於我們後邊優化有個很好地參考

一般情況下,設備端進程被幹掉有一下幾種情況

由以上分析,我們可以可以總結出,如果想提高我們應用後台運行時間,就需要提高當前應用進程優先順序,來減少被殺死的概率

分析了那麼多,現在對Android自身後台進程管理,以及進程的回收也有了一個大致的了解,後邊我們要做的就是想盡一切辦法去提高應用進程優先順序,降低進程被殺的概率;或者是在被殺死後能夠重新啟動後台守護進程

第一種方式就是利用系統漏洞,使用 startForeground() 將當前進程偽裝成前台進程,將進程優先順序提高到最高(這里所說的最高是服務所能達到的最高,即1);

這種方式在 7.x 之前都是很好用的,QQ、微信、IReader、Keep 等好多應用都是用的這種方式實現;因為在7.x 以後的設備上,這種偽裝前台進程的方式也會顯示出來通知欄提醒,這個是取消不掉的,雖然 Google 現在還沒有對這種方式加以限制,不過這個已經能夠被用戶感知到了,這種方式估計也用不了多久了

下邊看下實現方式,這邊這個 VMDaemonService 就是一個守護進程服務,其中在服務的 onStartCommand() 方法中調用 startForeground() 將服務進程設置為前台進程,當運行在 API18 以下的設備是可以直接設置,API18 以上需要實現一個內部的 Service ,這個內部類實現和外部類同樣的操作,然後結束自己;當這個服務啟動後就會創建一個定時器去發送廣播,當我們的核心服務被幹掉後,就由另外的廣播接收器去接收我們守護進程發出的廣播,然後喚醒我們的核心服務;

當我們啟動這個守護進程的時候,就可以使用以下 adb 命令查看當前程序的進程情況(需要 adb shell 進去設備),
為了等下區分進程優先順序,我啟動了一個普通的後台進程,兩外兩個一個是我們啟動的守護進程,一個是當前程序的核心進程,可以看到除了後台進程外,另外兩個進程都帶有 isForeground=true 的屬性:

然後我們可以用下邊的命令查看 ProcessID

有了 ProcessID 之後,我們可以根據這個 ProcessID 獲取到當前進程的優先順序狀態 Process State ,對應 Linux 層的 oom_adj
可以看到當前核心進程的級別為 0 ,因為這個表示當前程序運行在前台 UI 界面,守護進程級別為 1 ,因為我們利用漏洞設置成了前台進程,雖然不可見,但是他的級別也是比較高的,僅次於前台 UI 進程,然後普通後台進程級別為 4 ;當我們退到後台時,可以看到核心進程的級別變為 1 了,這就是因為我們利用 startForeground() 將進程設置成前台進程的原因,這樣就降低了進程被系統回收的概率了;

可以看到這種方式確實能夠提高進程優先順序,但是在一些國產的設備上還是會被殺死的,比我我測試的時候小米點擊清空最近運行的應用進程就別幹掉了;當把應用加入到設備白名單里就不會被殺死了,微信就是這樣,人家直接裝上之後就已經在白名單里了,我們要做的就是在用戶使用中引導他們將我們的程序設置進白名單,將守護進程和白名單結合起來,這樣才能保證我們的應用持續或者

Android系統在5.x以上版本提供了一個 JobSchele 介面,系統會根據自己實現定時去調用改介面傳遞的進程去實現一些操作,而且這個介面在被強制停止後依然能夠正常的啟動;不過在一些國產設備上可能無效,比如小米;
下邊是 JobServcie 的實現:

我們要做的就是在需要的時候調用 JobSchele 的 schele 來啟動任務;剩下的就不需要關心了, JobSchele 會幫我們做好,下邊就是我這邊實現的啟動任務的方法:

在實現 Service 類時,將 onStartCommand() 返回值設置為 START_STICKY ,利用系統機制在 Service 掛掉後自動拉活;不過這種方式只適合比較原生一些的系統,像小米,華為等這些定製化比較高的第三方廠商,他們都已經把這些給限制掉了;

這種方式在以下兩種情況無效:

事事沒有絕對,萬物總有一些漏洞,就算上邊的那些方式不可用了,後邊肯定還會出現其他的方式;我們不能保證我們的應用不死,但我們可以提高存活率;

其實最好的方式還是把程序做好,讓程序本身深入人心,別人喜歡你了,就算你被幹掉了,他們也會主動的把你拉起來,然後把你加入他們的白名單,然後我們的目的就實現了不是 😁 ~

『捌』 如何讓android的service一直在後台運行

首先來說,android是不存在一直運行後台服務的。而且,後天一直運行,就會消耗很大的手機資源的,因此也會影響手機的其他程序的使用的。

需要注意的事,手機系統運行的問題,以上的方法都是建立在手機系統夠大的時候才行的。要不就會被很輕易的就清理掉了。

以上就是我的回答,希望可以幫到題主。

閱讀全文

與android不死服務相關的資料

熱點內容
安卓怎麼下載正版刺激戰場 瀏覽:235
xrv本田壓縮比 瀏覽:63
空調耗電量手機app怎麼看 瀏覽:723
伺服器怎麼登錄u8 瀏覽:909
明星pdf 瀏覽:270
判斷手機訪問php 瀏覽:119
appstory怎麼設密碼 瀏覽:798
程序員月薪3萬 瀏覽:261
flash反編譯覆蓋碼怎麼找 瀏覽:196
女大男小忘年戀題材電影 瀏覽:83
築業軟體如何查找加密鎖 瀏覽:114
電信盒子系統升級伺服器地址 瀏覽:584
海康威視伺服器如何設置dns 瀏覽:911
空調壓縮機檢測方法 瀏覽:529
程序員的工資多少錢啊 瀏覽:966
faka.369kuai。com/details/022D34D2 瀏覽:626
主角一開始是個小孩子的小說 瀏覽:568
為什麼安卓手機拍抖音沒有蘋果好 瀏覽:367
關鍵點pdf 瀏覽:535
linuxpython版本查看 瀏覽:242