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

近日來,我在倒騰360手機衛士的時候,發現,你不管是把他數據清空,仍是把它強行中止之後,甚至是把它卸載之後,它的service都沒有被Android的系統幹掉,依然是巋然不動了。我就感到了納悶了,後來和羣裏的大牛討論後,才知道360手機衛士真他媽的流氓,它是靠第三方的應用,360手機衛士將其開啓。這就引出了,咱們今天的話題,說一說service的重啓方式,從而獲取到最高的權限了。android


1. 在service的OnDestroy中從新start service。app

正規的stopservice的退出後,都會調用OnDestroy方法了,咦,咱們何不在此方法後調用start service了,要想保證一個service被殺死後可以本身從新啓動(重生),只須要在onDestroy函數中加上一些代碼便可。以上面的例子來講明:函數

public void onDestroy(){  
    Log.i(TAG,"onDestroy");  
    .................  
      
    Intent localIntent new Intent();  
    localIntent.setClass(this, MusicService.class); // 銷燬時從新啓動Service  
    this.startService(localIntent);  
}  

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

2.在manifest清單文件中配置使其service不死。spa

咱們從TRACE中能夠驗證,service執行了onCreate,onStart(沒有看到onDestroy的TRACE,應該是執行了的)。若是想讓服務不被殺死(也即無動做不改變),在XML的<application段後面加上 android:persistent="true"就好了。code

這種方法也不是 萬能的,有些手機他恰恰可以停掉該service。xml

3.利用第三方應用start service對象

這種方法能夠說是萬能的,可是要確保用戶可以安裝你依附第三方應用,並且是徹徹底底的流氓行爲。blog

4.經過Receiver起應用進程

註冊BroadcastReceiver兩種方式:方式一,靜態的在AndroidManifest.xml中用<receiver>標籤聲明註冊,並在標籤內用<intent- filter>標籤設置過濾器,如上的開機自啓動方式。方式二,動態地在代碼中先定義並設置好一個 IntentFilter對象,而後在須要註冊的地方調 Context.registerReceiver()方法,若是取消時就調用Context.unregisterReceiver()方法。若是用動態方式註冊的BroadcastReceiver的Context對象被銷燬時,BroadcastReceiver也就自動取消註冊了。

一相應的實例以下:

import android.content.BroadcastReceiver;  
import android.content.IntentFilter;  
IntentFilter ScreenFilter new IntentFilter();  
ScreenFilter.addAction(Intent.ACTION_SCREEN_ON);  
registerReceiver(mScreenFilterReceiver, ScreenFilter);  
private BroadcastReceiver mScreenFilterReceiver = new BroadcastReceiver() {  
    public void onReceive(Context context, Intent intent) {  
            if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {  
                freshDetect();   //作要求的處理  
            }   
    }  
};  

這種方法重啓service,也能夠說是萬無一失的。

以上就是重啓service的四種方式,你們是否有收穫,請給予反饋.

相關文章
相關標籤/搜索