當前位置:編程學習大全網 - 源碼下載 - android開發如何防止推送服務被手機系統扼殺?

android開發如何防止推送服務被手機系統扼殺?

1.在服務中重寫以下方法。這個方法有三個返回值。START_STICKY是在服務kill後自動重寫並創建[code ]java代碼:@ OverridePublicIntStartCommand(Intent,IntFlags,int startid){ return START _ STICKY;}-@ OverridepublicintonStartCommand(intentinten,intflags,int startid){//todo auto-generatedmethodstublog . v(" TrafficService "," start command ");flags = START _ STICKYreturn super . onstart command(intent,flags,startId);//return start _ rede deliver _ INTENT;}2.重新啟動該服務。服務{ intentLocalIntent = newIntent()的onDestroy()中的PublicoVoidonDestroy();localIntent.setClass(this,my service . class);//重新啟動servicethis。銷毀時啟動服務(本地意圖);}管家在殺死進程時,調用系統自帶的強制殺死功能(即在設置中)。查殺的時候會停止應用的整個進程,當然也包括服務。如果服務在運行中被強制終止,進程仍會顯示。無論是kill的整個進程還是just kill落入應用的服務,都不會重啟服務。不知道妳是怎麽實現重啟的,真的很費解。在eclipse中,當用stop按鈕殺死進程時,會重啟ServiceKILL的問題:在1.settings中的stopserviceonDestroy方法中,調用startService重啟服務。2.2.settings廣播中的forcestop應用捕獲系統(動作為android。意圖。行動。包_重述)3。借助第三方應用,殺死正在運行的任務,提高服務啟動的優先級。今天主要討論Android如何讓壹個服務自動啟動。Android手機將在啟動過程中觸發壹個StandardBroadcastAction,命名為Android。Intent.action.boot _ completed(記住只會觸發壹次)。在這裏,我們可以通過構建壹個廣播接收器來接收這個動作。我簡單寫壹下實現步驟:第壹步:首先創建壹個廣播接收器,重構它的抽象方法onReceive (context context,intent),在裏面啟動妳想要啟動的服務或者app。【代碼】java代碼:importandroid . content . broadcast receiver;importan droid . content . context;importan droid . content . intent;importandroid . util . log;publiclclassbootbroadcastreceiverextentdsbroadcastreceiver {//Rewrite on receive method @ overridePublicoVoidonReceive(context,intentintent) {//XXX.class是要啟動的服務intent service = new intent(context,xxxclass);context.startService(服務);Log.v("TAG "," Boot automatic service自動啟動... ");//啟動應用程序。參數是需要自動啟動的應用程序的包名。Intent Intent = getPackageManager()。getlaunchinntentforpackage(package name);context.startActivity(意圖);}}步驟2:配置xml文件並接收]java代碼,用於在接收端添加意向過濾器配置[代碼]。第三步:添加權限,實現壹個不會被殺死的進程。看看Android文檔就知道,當進程長時間不活動或者系統需要資源的時候,會自動清理門戶,殺死壹些服務、隱形活動等進程。但是如果壹個進程不想被殺死(比如數據緩存進程,狀態監控進程,或者遠程服務進程),應該怎麽做才能防止進程被殺死呢?將android: persistent = "true "添加到thesectionyourandroidmanifest . XML中記住,這是不能濫用的。如果系統中有更多的服務和應用程序使用這個,整個系統就完了。目前系統中的應用非常有限,比如phone,必須是壹直活著的。提高服務優先級的方法Android系統對於內存管理有自己的壹套方法。為了保證系統的有序穩定運行,系統會自動分配和控制程序的內存使用。當系統覺得當前資源非常有限的時候,為了保證壹些高優先級的程序能夠運行,就會殺掉壹些它認為不重要的程序或者服務來釋放內存。這將確保對用戶真正有用的程序仍然會再次運行。如果妳的服務出現這種情況,很可能會先被幹掉。但是如果增加服務的優先級,可以讓它停留的時間稍微長壹點。我們可以用setForeground(true)設置服務的優先級。為什麽是前景?默認啟動的服務被標記為後臺,當前正在運行的活動壹般被標記為後臺,這意味著如果妳為服務設置了後臺,它將擁有與正在運行的活動類似的更高優先級。這並不能保證妳的服務永遠不會被殺死,只是提高了它的優先級。從Android1.5開始,啟動的服務可以調用start foreground (int,notification)將服務設置在前臺狀態,調用stopForeground(boolean)將服務設置在後臺狀態。我們將調用startForeground (int,notification)並傳入參數notification,它將在狀態欄中顯示正在進行的foregroundservice。Backgroundservice不會顯示在狀態欄中。在Android1.0中,設置壹個服務為前臺狀態:set foreground(true);mNM.notify(id,通知);將壹個服務設置為後臺狀態:mnm . cancel(id);set foreground(false);相比之下,在1.0API中調用setForeground(boolean)只是改變了服務的狀態,用戶不會察覺到。在新的API中,通知被強制綁定到改變服務狀態的動作,foregroundservice會顯示在狀態欄中,而backgroundservice不會。遠程服務控制器& amp綁定跨進程調用服務。暫時不學習。如何防止Android應用中的服務被系統回收?很多朋友都在問,如何防止Android應用中的服務被系統回收?簡單回答壹下吧。對於被系統回收的服務,壹般的方法可以通過提高優先級來解決。在androidManifest.xml文件中,可以通過Android的屬性為intent-filter設置最高優先級:priority="1000 ",1000為最高值。如果數量較小,優先級較低,對於廣播來說比較實用。建議如果妳的應用很重要,可以考慮通過系統使用。
  • 上一篇:TCP協議和HTTP協議
  • 下一篇:求做C語言的投票系統
  • copyright 2024編程學習大全網