在我的应用程序中,我有一个正在运行的前台服务。当用户注销时,我可以停止前台服务而不会出现问题。但是,如果用户滑动关闭应用程序或应用程序崩溃,我无法处理停止前台。
OnSleep()在应用程序关闭/崩溃时调用,但也会在应用程序处于后台时调用。我正在使用的前台服务必须继续运行,如果应用程序已经后台运行,但我需要在关闭前台服务时停止它,而不是后台服务,因此我不能在OnSleep()方法中停止前台服务。
有什么方法可以让我知道应用程序何时关闭(而不是后台),这样我就可以停止前台服务了吗?
发布于 2020-04-17 19:37:25
我找到了一个解决方案,至少看起来对我的情况是有效的。这也是一个简单的修复方法。在我覆盖OnStartCommand的同一个类中,我还覆盖了OnTaskRemoved,它会在用户从服务中删除任务时触发。因此,当用户滑动关闭应用程序时,将调用OnTaskRemoved,您可以在其中处理关闭服务。
public override void OnTaskRemoved(Intent rootIntent)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
StopForeground(StopForegroundFlags.Remove);
}
else
{
StopForeground(true);
}
StopSelf();
base.OnDestroy();
System.Diagnostics.Process.GetCurrentProcess().Kill();
}发布于 2020-04-17 04:01:44
我也遇到过同样的问题,实现它的方法之一是在BroadcastReceiver使用的前台服务的通知中添加一种“按钮”(操作)。因此,在关闭应用程序后,用户只需点击前台通知中包含的按钮即可关闭前台服务。在我看来,您还应该覆盖OnDestroy()方法来在那里做一些事情,并调用StopForeground(一个示例)。因为在某些情况下,系统决定自行销毁服务(例如,service不再使用并正在被删除。)
发布于 2020-04-17 10:37:54
要停止前台服务,您可以这样做:
var intent = new Intent(this, typeof(ForegroundService));
StopService(intent);您可以重写OnDestroy来停止前台服务。
StopService(new Intent(this, typeof(ForegroundService));或
StopSelf();更多关于前台服务的详细信息,您可以查看Foreground Services
https://stackoverflow.com/questions/61254635
复制相似问题