活动销毁后停止Android服务

时间:2014-12-14 22:01:51

标签: android service background alarmmanager

我有一个应用程序正在执行一些重复的后台任务。我正在使用service和Alarmmanager以及setrepeating方法。停止此服务的唯一方法是在我的活动屏幕上显示一个按钮(当然,android系统可以随时以任何理由杀死它,但我不关心android系统的作用)。我的问题是,当我的活动被Android系统摧毁一段时间后,我有一个永远运行的服务,除非Android杀死它。我的问题是如何在创建新活动后获取此服务的引用以阻止它(我假设我在旧的活动被销毁后创建新活动)?

3 个答案:

答案 0 :(得分:0)

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

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

最后,考虑OttoEventbus - 两个非常棒的开源项目,用于在android项目中的组件之间进行通信。

答案 1 :(得分:0)

在MainActivity上使用绑定服务和取消绑定服务方法,以便在用户或Android系统明确销毁您的应用程序活动时,您可以调用解除绑定服务onDestroy(),服务类将被销毁。

使用这篇文章作为指南:Example: Communication between Activity and Service using Messaging

答案 2 :(得分:0)

我想我无法清楚地解释我的问题。但我在这篇文章中找到了答案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));
}