天天看點

由360手機衛士談起——讓你的service擷取最高權限。

近日來,我在倒騰360手機衛士的時候,發現,你無論是把他資料清空,還是把它強行停止以後,甚至是把它解除安裝以後,它的service都沒有被android的系統幹掉,依然是巋然不動了。我就感到了納悶了,後來和群裡的大牛讨論後,才知道360手機衛士真他媽的流氓,它是靠第三方的應用,360手機衛士将其開啟。這就引出了,我們今天的話題,說一說service的重新開機方式,進而擷取到最高的權限了。

1. 在service的ondestroy中重新start service。

正規的stopservice的退出後,都會調用ondestroy方法了,咦,我們何不在此方法後調用start service了,要想保證一個service被殺死後能夠自己重新啟動(重生),隻需要在ondestroy函數中加上一些代碼即可。以上面的例子來說明:

這種方法也不是很好了,當你把service伴随的主程序停掉以後,它依然會把service幹掉。

2.在manifest清單檔案中配置使其service不死。

我們從trace中可以驗證,service執行了oncreate,onstart(沒有看到ondestroy的trace,應該是執行了的)。如果想讓服務不被殺死(也即無動作不改變),在xml的<application段後面加上 android:persistent="true"就行了。

這種方法也不是 萬能的,有些手機他偏偏能夠停掉該service。

3.利用第三方應用start service

這種方法可以說是萬能的,但是要確定使用者能夠安裝你依附第三方應用,而且是不折不扣的流氓行為。

4.通過receiver起應用

注冊broadcastreceiver兩種方式:方式一,靜态的在androidmanifest.xml中用<receiver>标簽聲明注冊,并在标簽内用<intent- filter>标簽設定過濾器,如上的開機自啟動方式。方式二,動态地在代碼中先定義并設定好一個 intentfilter對象,然後在需要注冊的地方調 context.registerreceiver()方法,如果取消時就調用context.unregisterreceiver()方法。如果用動态方式注冊的broadcastreceiver的context對象被銷毀時,broadcastreceiver也就自動取消注冊了。

一相應的執行個體如下:

這種方法重新開機service,也可以說是萬無一失的。

以上就是重新開機service的四種方式,大家是否有收獲,請給予回報.

繼續閱讀