应用关闭后Android服务重新启动

时间:2014-11-01 10:40:43

标签: android service xmpp

我有一个Android服务,它总是在后台运行,类似于WhatsApp的MessageService所做的。当应用程序启动时,它确保服务确实正在运行。稍后,其中一个活动绑定到服务以使用其中的一些方法以及服务已经执行的操作,以及活动销毁时 - 它与服务解除绑定。 到目前为止,这似乎很有效。

但是当我关闭我的应用程序(通常,不是强制停止)时,服务似乎会在一分钟左右重新启动,然后继续正常工作。 但是,当我查看WhatsApp的服务时,我发现这不会发生 - 关闭应用程序后服务继续正常运行并且不会重新启动。

有关导致此问题及其解决方法的任何提示?

修改 代码,按要求:

服务的相关部分:

    public static boolean isRunning = false;
    ... 
    ...
    @Override
public int onStartCommand(final Intent intent, int flags, int startId) {
    if (!isRunning) {
        isRunning = true;

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                connect(intent.getIntExtra(Constants.ID, -1),
                        intent.getStringExtra(Constants.PASSWORD));
            }
        });
        thread.start();
    }
    return START_REDELIVER_INTENT;
......
}

应用启动时启动服务

        if (!ChatService.isRunning) {
        Intent chatService = new Intent(this, ChatService.class);
        chatService.putExtra(Constants.ID, LocalManager.getID());
        chatService.putExtra(Constants.PASSWORD, LocalManager.getPassword());
        startService(chatService);
    }

绑定到其中一个活动中的服务

    void bindService() {
    bindService(new Intent(Chats.this, ChatService.class), mConnection,
            Context.BIND_AUTO_CREATE);
    mIsBound = true;

}

第二次编辑 事实证明它与绑定到服务无关,即使我没有绑定到服务也会发生相同的行为(当应用程序关闭时服务重新启动)。在单独的流程上运行服务也没有解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果使用方法startService()在其他地方启动服务,即使绑定到它的活动被销毁,它也会重新启动。所以请确保只通过bindService()方法启动服务。