首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在app关闭后才结束前台服务

如何在app关闭后才结束前台服务
EN

Stack Overflow用户
提问于 2020-04-16 23:57:52
回答 3查看 348关注 0票数 0

在我的应用程序中,我有一个正在运行的前台服务。当用户注销时,我可以停止前台服务而不会出现问题。但是,如果用户滑动关闭应用程序或应用程序崩溃,我无法处理停止前台。

OnSleep()在应用程序关闭/崩溃时调用,但也会在应用程序处于后台时调用。我正在使用的前台服务必须继续运行,如果应用程序已经后台运行,但我需要在关闭前台服务时停止它,而不是后台服务,因此我不能在OnSleep()方法中停止前台服务。

有什么方法可以让我知道应用程序何时关闭(而不是后台),这样我就可以停止前台服务了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-17 19:37:25

我找到了一个解决方案,至少看起来对我的情况是有效的。这也是一个简单的修复方法。在我覆盖OnStartCommand的同一个类中,我还覆盖了OnTaskRemoved,它会在用户从服务中删除任务时触发。因此,当用户滑动关闭应用程序时,将调用OnTaskRemoved,您可以在其中处理关闭服务。

代码语言:javascript
复制
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();
        }
票数 0
EN

Stack Overflow用户

发布于 2020-04-17 04:01:44

我也遇到过同样的问题,实现它的方法之一是在BroadcastReceiver使用的前台服务的通知中添加一种“按钮”(操作)。因此,在关闭应用程序后,用户只需点击前台通知中包含的按钮即可关闭前台服务。在我看来,您还应该覆盖OnDestroy()方法来在那里做一些事情,并调用StopForeground(一个示例)。因为在某些情况下,系统决定自行销毁服务(例如,service不再使用并正在被删除。)

票数 1
EN

Stack Overflow用户

发布于 2020-04-17 10:37:54

要停止前台服务,您可以这样做:

代码语言:javascript
复制
var intent = new Intent(this, typeof(ForegroundService));
StopService(intent);

您可以重写OnDestroy来停止前台服务。

代码语言:javascript
复制
StopService(new Intent(this, typeof(ForegroundService));

代码语言:javascript
复制
StopSelf();

更多关于前台服务的详细信息,您可以查看Foreground Services

Start Services

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61254635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档