2013-08-22 70 views
3

我需要让我的服务始终在后台运行。并用“startService()”函数启动我的服务。我不想重启服务,无论是应用程序的状态。安卓服务START_STICKY START_NOT_STICKY

这是我的观察。

START_STICKY>如果应用程序启动,服务正在重新启动。当应用程序关闭时,服务也将自行重新启动。

START_NOT_STICK>服务在应用程序关闭后不起作用。

我需要一个始终运行的服务,它将在应用程序启动时接收广播。如果应用程序正在运行,服务状态将无法取决。

你能帮我吗?

谢谢。

回答

3

当设备启动时,您将需要设置启动您的服务警报(它会间歇唤醒并确保您的服务正在运行)的启动接收器。警报接收器应该每分钟醒来(或多次)以查看您的服务未被Android清除(这将不时发生)。

[编辑]

你会想要一个BootReceiver开始你的报警,将是这样的:

public class BootReceiver extends BroadcastReceiver { 
    @Override 
     public void onReceive(Context context, Intent intent) { 

      AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      PendingIntent pendingIntent = 
        PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0); 

      alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 2000, 60000, pendingIntent); 
     } 
    } 

而一个alarmReceiver应该是这样的:

public class AlarmReceiver extends BroadcastReceiver { 
    private String TAG = "AlarmReceiver"; 
    // onReceive must be very quick and not block, so it just fires up a Service 
    @Override 
    public void onReceive(Context context, Intent intent) {  
     Intent i = new Intent(context, MyLovelyService.class);  
     PendingIntent.getService(context, 0,i, 0).send();  
    } 
} 

和最后这需要进入你的清单:

<receiver android:name=".BootReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<receiver android:name=".AlarmReceiver" /> 
+0

谢谢Dredel。但我的问题是,在应用程序关闭后,服务会自行终止。我怎样才能防止这个? – dracula

+0

你如何开始服务?如果您的服务是由ALARM(而不是您的应用)启动的,那么它将不会以任何方式与您的活动相关联......我将编辑我的答案以向您展示一个示例... –

+0

我开始了我的服务由startservice命令执行。我会尝试你的代码。看起来合乎逻辑。谢谢 ! – dracula