首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用程序关闭时,如何停止从多个活动中调用的Android服务?

当应用程序关闭时,如何停止从多个活动中调用的Android服务?
EN

Stack Overflow用户
提问于 2018-08-06 10:12:16
回答 1查看 39关注 0票数 0

我有一个public class Tracking extends Service女巫,它是从几乎每一个活动中调用的,具有这样的功能:

代码语言:javascript
复制
    Intent serviceIntent = new Intent(this, Tracking.class);
    serviceIntent.putExtra("name", "Tabla3b Kras");
    serviceIntent.putExtra("time", TimeGenerator.getTime());
    startService(serviceIntent);

这很好,public void onCreate()只被称为第一时间,而public int onStartCommand(Intent intent, int flags, int startId)则是每隔一次调用一次。我的问题是当用户关闭应用程序时。让我们说,双回按或进入开放的应用程序列表,并驳回它。我得到了一个“不幸的是,”名称已经停止工作。

我知道我可以在onStop()中关闭服务,但是由于我是从几乎所有的活动中调用服务,所以我必须在所有这些活动中实现onStop()吗?还是仅仅在MainActivity.java中这样做就足够了?如果用户在活动之间发生变化,服务会停止吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-06 10:19:09

服务是一个后台过程。它并不意味着从每一项活动开始/停止。

  • 您只可以在应用程序中启动一次。就像您在第一次活动(splash)或应用程序级类中开始的一样。你不需要在每一个活动中开始服务。
  • 同样,你不需要停止你的服务的每一个活动。您可以在处理onBackPress().时停止一次服务

然后如何将变量从其他活动传递给服务?

有几种方法可以在活动和服务之间进行通信。

如果你问我的喜好,我以前使用过BroadcastReceiver & Binder。但是现在我使用EventBus。您可以在EventBus文档中简化实现步骤。

建议:

检查您的服务是否已在运行。如果没有运行,则在使用之前启动服务。

代码语言:javascript
复制
private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51705256

复制
相关文章

相似问题

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