首先,它真的是很糟糕的模式来对抗 强制运行服务的用户的意愿。 无论如何,您可以使用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
检查您的服务是否正在运行或不在您的启动画面,然后重新启动服务,如果它弯腰。 –