如何在Android中可靠地切换服务?
编辑:我特别关心在服务被终止的情况下更新我的切换 我有一个活动,我想显示用户启动或停止服务的切换。活动应显示服务当前是否正在运行,因此活动需要知道服务是否正在运行 这里讨论了这个问题: 有两个总体战略: 1) 使用活动管理器获取正在运行的服务的列表:ActivityManager.getRecentTasks()。缺点:is getRecentTasks已被弃用且速度较慢 2) 使用服务类中的静态字段切换状态。缺点:当服务被终止时,不会调用服务的onDestroy()方法。因此,在这种情况下无法更新静态变量,活动可能会认为服务正在运行,而实际情况并非如此如何在Android中可靠地切换服务?,android,android-service,Android,Android Service,编辑:我特别关心在服务被终止的情况下更新我的切换 我有一个活动,我想显示用户启动或停止服务的切换。活动应显示服务当前是否正在运行,因此活动需要知道服务是否正在运行 这里讨论了这个问题: 有两个总体战略: 1) 使用活动管理器获取正在运行的服务的列表:ActivityManager.getRecentTasks()。缺点:is getRecentTasks已被弃用且速度较慢 2) 使用服务类中的静态字段切换状态。缺点:当服务被终止时,不会调用服务的onDestroy()方法。因此,在这种情况下无法
有没有更可靠的方法来解决这个问题?我可以每隔N秒将静态变量重新设置为时间戳,如果活动发现静态变量太旧,我就知道服务已被终止。我不知道它是否适用于您的情况,但我有一个服务,我在它上创建了一个静态启动方法
MyService.startifeeded(context)
。此方法根据某些内部数据库状态确定服务是否应运行。如果它应该运行,它将使用上下文启动MyService
,否则它将调用stopService
终止它(这将调用onDestroy()
以允许服务“清理”)
接下来调用onStartCommand()
,在此读取非静态字段变量isRunning
,以确定是否应调用服务代码(在本例中为读取WiFi信号)
我想这个方案的一个变体可能会被用来获得您所寻求的功能。对我来说,关键是使静态的MyService.startifeeded(context)
方法幂等,从这个意义上说,如果它应该运行,它将保持运行(而不是重新启动),如果它不应该运行,它将被破坏或者什么也不会发生
也许这在你的情况下没有什么意义,只是想抛开一些想法 以下方法可能在某种程度上适合您:
但是,它们都不能解决服务终止时的问题。我特别关注服务终止案例。我将对问题进行编辑,使其更清楚。