【问题标题】:Stopping android service after activity destroyed活动销毁后停止android服务
【发布时间】:2017-04-24 13:44:11
【问题描述】:

我有一个应用程序正在执行一些重复的后台任务。我正在使用带有 setrepeating 方法的服务和 Alarmmanager。停止此服务的唯一方法是在我的活动屏幕上显示一个按钮(当然,android 系统可以随时以任何原因杀死它,但我不在乎 android 系统做了什么)。我的问题是,当我的活动在一段时间后被 android 系统破坏时,我有一个永远运行的服务,除非 Android 杀死它。我的问题是如何在创建新活动后获得该服务的引用以停止它(我假设我在旧活动被破坏后创建新活动)?

【问题讨论】:

标签: android service background alarmmanager


【解决方案1】:

考虑bindService and unbindService。 创建活动后,您可以调用bindService,并使用返回的活页夹与您的服务进行通信。可以绑定和启动服务,以防您不想在活动结束后取消绑定来终止服务。

另一种方法是使用LocalBroadcastManager 在您的活动和服务之间进行通信。

最后,考虑Otto 或Eventbus - 两个很棒的开源项目,用于在您的 android 项目中的组件之间进行通信。

【讨论】:

  • 我不确定这些是否能解决我的问题。我可以在活动和服务之间进行沟通。问题是在我的活动被破坏后,我无法停止我的服务。我也不想绑定用户,因为我无法控制何时销毁我的活动,即使在我的活动被销毁后,我也希望我的服务继续工作,除非用户停止它。
  • 我认为你需要更清楚你想要什么。您的问题似乎是说您想在活动被破坏时终止服务。如果是这样,绑定是一个很好的答案。如果您想要其他东西,请告诉我们您想要什么。
  • 如果我理解正确,@mbaydar 希望能够在他的活动被破坏然后重新创建后重新连接到他的后台服务。这里有两个选项。 1. 启动服务并绑定到它,从而确保 unbind 不会杀死服务,但如果服务已经在运行,他将简单地绑定到已经运行的实例。 2. 向“任何可能存在的服务”发送广播事件(/otto/eventbus),并等待回复。
【解决方案2】:

在您的 MainActivity 上使用绑定服务和取消绑定服务方法,这样当您的应用程序活动被用户或 Android 系统显式销毁时,您可以调用取消绑定服务onDestroy(),服务类也随之销毁。

以这篇文章为指导:Example: Communication between Activity and Service using Messaging

【讨论】:

  • 如果我使用绑定服务,这意味着一旦我的活动被破坏,我的服务也将被破坏。这是我不想要的,因为我无法控制我的活动何时被破坏。换句话说,我无法让我的活动在后台运行多久。所以我认为答案没有约束力。
  • 即使创建了新活动,服务类也永远运行而不会关闭的原因仅仅是因为服务类首先与任何活动不同步(无通信形式)首次启动应用程序。
【解决方案3】:

我想我无法清楚地解释我的问题。但我在这篇帖子How to get reference to running service?找到了我的答案 Dawid Sajdak 回答

private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if ("your.service.classname".equals(service.service.getClassName())) {
            return false;
        }
    }
    return true;
}

if(isMyServiceRunning()) {
    stopService(new Intent(ServiceTest.this,MailService.class));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多