2017-02-16 48 views
1

我想开始我的服务,即使用户强制停止应用程序或其他应用程序强制停止我的应用程序。 这是我的代码。即使用户强行关闭它,如何启动服务?

@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); 
} 
+0

在'onDestroy()'方法中再次启动您的服务。 –

+0

为什么要这样做?作为用户,我会立即卸载。如果我强行停止,我**希望**停止。我会考虑在强制停止(可能)有害后自动重新启动。 – Fildor

+0

检查您的服务是否正在运行或不在您的启动画面,然后重新启动服务,如果它弯腰。 –

回答

0

首先,它真的是很糟糕的模式来对抗 强制运行服务的用户的意愿。 无论如何,您可以使用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));

0

我开始onDestroy()。这个服务代码会为我工作,如果任何一个有更有效的方式来做到这一点,请对此发表评论。

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    startLocationUpdateService(); 
    } 
相关问题