我需要使服务始终在后台运行.然后使用“ 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" />
总结 以上是内存溢出为你收集整理的Java-Android服务START_STICKY START_NOT_STICKY全部内容,希望文章能够帮你解决Java-Android服务START_STICKY START_NOT_STICKY所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)