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