首先,它真的是很糟糕的模式來對抗 強制運行服務的用戶的意願。 無論如何,您可以使用BroadcastReceiver重新啓動它,該BroadcastReceiver處理從您的服務的onDestroy()發送的 廣播。
StickyService.java
public class StickyService extends Service
{
private static final String TAG = "StickyService";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
sendBroadcast(new Intent("YouWillNeverKillMe"));
}
}
RestartServiceReceiver.java
public class RestartServiceReceiver extends BroadcastReceiver
{
private static final String TAG = "RestartServiceReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "onReceive");
context.startService(new Intent(context.getApplicationContext(),
StickyService.class));
}
}
聲明部件清單文件
<service android:name=".StickyService" >
</service>
<receiver android:name=".RestartServiceReceiver" >
<intent-filter>
<action android:name="YouWillNeverKillMe" >
</action>
</intent-filter>
</receiver>
在組件中啓動StickyService(即,應用程序,活動,片段): startService(new Intent(this, StickyService.class));
在'onDestroy()'方法中再次啓動您的服務。 –
爲什麼要這樣做?作爲用戶,我會立即卸載。如果我強行停止,我**希望**停止。我會考慮在強制停止(可能)有害後自動重新啓動。 – Fildor
檢查您的服務是否正在運行或不在您的啓動畫面,然後重新啓動服務,如果它彎腰。 –