如何实现runnables队列

nin*_*nse 5 java queue android runnable

我试图在异步任务期间实现一个接一个地执行的runnables队列(意味着队列中的下一个将在另一个完成后执行).我写了一个管理器来管理这些可运行的任务和任务.然后我在异步任务中获得第一个任务并运行它,希望它将通过队列运行,但是它最终会运行第一个runnable两次.任何人都可以帮助我使用我一直在使用的代码或指向一个可能有所帮助的示例吗?

public class ConnectionManager {

    public static final int MAX_CONNECTIONS = 15;

    private ArrayList<Runnable> active = new ArrayList<Runnable>();
    private ArrayList<Runnable> queue = new ArrayList<Runnable>();

    private static ConnectionManager instance;

    public static ConnectionManager getInstance() {
        if (instance == null)
            instance = new ConnectionManager();
        return instance;
    }

    public void push(Runnable runnable) {
        queue.add(runnable);
        if (active.size() < MAX_CONNECTIONS)
            startNext();
    }

    private void startNext() {
        if (!queue.isEmpty()) {
            Runnable next = queue.get(0);
            queue.remove(0);
            active.add(next);

            Thread thread = new Thread(next);
            thread.start();
        }
    }

    public void didComplete(Runnable runnable) {
        active.remove(runnable);
        startNext();
    }
}

public class Task implements Runnable {
    Context con;
    String xmlFile;
    File taskFile;
    String Id;

    public void create(Context context, String xml, File task, String id) {
        this.con = context;
        this.xmlFile = xml;
        this.taskFile = task;
        this.Id = id;
        ConnectionManager.getInstance().push(this);
    }

    @Override
    public void run() {
        User.SendTask(con, xmlFile, taskFile, Id);

        ConnectionManager.getInstance().didComplete(this);
    }
Run Code Online (Sandbox Code Playgroud)

kin*_*ori 14

如何使用Executors.newSingleThreadExecutor()? http://developer.android.com/reference/java/util/concurrent/Executors.html#newSingleThreadExecutor%28java.util.concurrent.ThreadFactory%29

API描述说明此执行程序只按顺序执行一个任务并具有无限制的队列.我认为这个可以满足您的要求.