即使用户强行关闭它,如何启动服务?
问题描述:
我想开始我的服务,即使用户强制停止应用程序或其他应用程序强制停止我的应用程序。 这是我的代码。即使用户强行关闭它,如何启动服务?
@Override
public void onDestroy() {
super.onDestroy();
stopLocationUpdates();
AlarmManager alarmMgr = (AlarmManager)this.getSystemService(this.ALARM_SERVICE);
Intent i = new Intent(this, LocationUpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, i, 0);
alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10, pendingIntent);
}
答
首先,它真的是很糟糕的模式来对抗 强制运行服务的用户的意愿。 无论如何,您可以使用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()
。这个服务代码会为我工作,如果任何一个有更有效的方式来做到这一点,请对此发表评论。
@Override
public void onDestroy() {
super.onDestroy();
startLocationUpdateService();
}
在'onDestroy()'方法中再次启动您的服务。 –
为什么要这样做?作为用户,我会立即卸载。如果我强行停止,我**希望**停止。我会考虑在强制停止(可能)有害后自动重新启动。 – Fildor
检查您的服务是否正在运行或不在您的启动画面,然后重新启动服务,如果它弯腰。 –