我试图停止一个作为前台服务运行的服务。
当前的问题是,当我调用stopService()
时,通知仍然存在。
因此,在我的解决方案中,我在onCreate()
中添加了一个接收器,
在onReceive()
方法中,我调用了stopforeground(true)
,它隐藏了通知。然后stopself()
停止服务。
在onDestroy()
里面我注册了接收器。
有没有更合适的方法来处理这件事?因为stopService()根本不起作用。
@Override
public void onDestroy(){
unregisterReceiver(receiver);
super.onDestroy();
}
9条答案
按热度按时间bz4sfanl1#
1.从您的Activity中调用
startService(intent)
并向其传递一些表示键的数据,以停止服务。1.从您的服务,请致电
stopForeground(true)
1.然后是
stopSelf()
bybem2ql2#
要从Activity启动和停止前台服务,用途:
在前台服务中-使用(至少)以下代码:
jchrr9hc3#
如这里所述:https://developer.android.com/guide/components/services#Stopping
启动的服务必须管理自己的生命周期。也就是说,系统不会停止或销毁服务,除非它必须恢复系统内存,并且服务在**onStartCommand()返回后继续运行。服务必须通过调用stopSelf()自行停止,或者其他组件可以通过调用stopService()停止服务。
使用stopSelf()或stopService()**请求停止后,系统会尽快销毁服务。
因此,您可以从用于调用startService()的Activity调用stopService()。我在这里做了:
我创建了两个按钮来启动和停止服务,它工作。
wb1gzix04#
从活动
服务本身
kyks70gy5#
除了其他答案,我用这个片段结束使用android oreo和later停止工作服务。
和在职
startForeground()是强制性的,除非应用程序在不调用它的情况下崩溃
新的Context.startForegroundService()方法启动前台服务。系统允许应用调用Context.startForegroundService(),即使应用处于后台也是如此。但是,应用必须在服务创建后的五秒内调用该服务的startForeground()方法。
https://developer.android.com/about/versions/oreo/android-8.0-changes.html
sz81bmfz6#
如果要停止服务然后更新通知,可以先调用stopSelf(),然后再调用notify()。stopForeground(false)使通知可取消。
0tdrvxhp7#
我发现停止服务的最好方法是让服务本身停止。这样,您就可以确保它实际上会停止并保持数据完整性。如果你想从外部(活动)做,我通常使用全局静态属性。
在这里检查我的答案:https://stackoverflow.com/a/57833370/7795547
z2acfund8#
来自服务:
来自活动:
ecbunoof9#
如果您有一个不时(周期性地)在前台运行的任务,例如使用System.Threading.Timer,则应修改计时器,使其定期停止执行方法。
一种“停止”计时器的方法: