2017-02-16 49 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(); 
    } 
相關問題