编程语言
首页 > 编程语言> > Java-Android服务START_STICKY START_NOT_STICKY

Java-Android服务START_STICKY START_NOT_STICKY

作者:互联网

我需要使服务始终在后台运行.然后使用“ startService()”函数启动我的服务.无论应用程序处于什么状态,我都不想重新启动服务.

这是我的观察.

START_STICKY>如果应用程序启动,服务将重新启动.当应用程序关闭时,服务也会重新启动.

START_NOT_STICK>应用程序关闭后,该服务无法正常工作.

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

你能帮助我吗 ?

谢谢.

解决方法:

您将需要设置一个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" />

标签:android-intent,android-service,java,android
来源: https://codeday.me/bug/20191122/2063139.html