3

我需要让我的服务始终在后台运行。并使用“startService()”函数启动我的服务。无论应用程序的状态如何,我都不想重新启动服务。

这是我的观察。

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

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

我需要一个始终运行的服务,它会在应用程序启动时接收广播。服务状态不取决于应用程序是否正在运行。

你能帮助我吗 ?

谢谢。

4

1 回答 1

3

您将需要设置一个 BOOT 接收器,该接收器在设备启动时启动您的服务警报(它将间歇性地唤醒并确保您的服务正在运行)。ALARM 接收器应该每分钟(左右)唤醒一次,以查看您的服务尚未被 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" />
于 2013-08-22T17:47:36.240 回答