/*
* Copyright 2014 Bevbot LLC <info@bevbot.com>
*
* This file is part of the Kegtab package from the Kegbot project. For
* more information on Kegtab or Kegbot, see <http://kegbot.org/>.
*
* Kegtab is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation, version 2.
*
* Kegtab is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with Kegtab. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kegbot.core;
import com.squareup.otto.Bus;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* A {@link Manager} which automatically executes {@link #runInBackground()}.
*
* @author mike wakerly (opensource@hoho.com)
*/
public abstract class BackgroundManager extends Manager {
private ExecutorService mExecutorService = null;
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
runInBackground();
}
};
public BackgroundManager(Bus bus) {
super(bus);
}
@Override
protected synchronized void start() {
if (mExecutorService == null) {
mExecutorService = Executors.newSingleThreadExecutor();
mExecutorService.execute(mRunnable);
}
}
@Override
protected synchronized void stop() {
if (mExecutorService != null) {
mExecutorService.shutdown();
mExecutorService = null;
}
}
/**
* Runs in the background after calling {@link #start()}. Implementations performing long-lived
* background work should respond to {@link #stop()} and abort the work.
*/
protected abstract void runInBackground();
}