在Android中逐个处理对象的最佳方法

时间:2014-11-29 05:50:03

标签: android arraylist android-asynctask task

我创建了一个ArrayList的子类:

public class ProcessQueue<E> extends ArrayList<E> {

    private OnItemAdded mListener;

    @Override
    public boolean add(E object) {
        boolean result = super.add(object);

        if (mListener != null)
            mListener.onItemAdded(object);

        return result;
    }

    @Override
    public void add(int index, E object) {
        super.add(index, object);

        if (mListener != null)
            mListener.onItemAdded(object);
    }


    public void setOnItemAddedListener(OnItemAdded listener) {
        mListener = listener;
    }

    public interface OnItemAdded {
        public void onItemAdded(Object object);
    }
}

添加对象后:

@Override
public void onItemAdded(Object object) {
    new ProcessTask().execute((String) object);
}

我执行以下操作将项添加到processqueue列表中:

for (int i=0;i<3;i++) {
    mProcessItem.add(String.valueOf(i));
}

所以我的所有对象都添加了相同的任务。由于我为我的对象运行的ProcessTask非常大,有没有办法逐个处理添加的项目?

1 个答案:

答案 0 :(得分:1)

你的意思是你想在一个单独的线程上运行你的ProcessTask.execute,一次一个,而不是用尽UI线程吗?不确定我是否正确理解你,但如果这就是你的意思,那么你可以使用在自己的线程上运行的Handler,并将Runnable发布到每个任务的处理程序。

像这样初始化线程,但只为您的应用程序执行一次。每次开始某项活动时,您都不希望创建新线程。

HandlerThread ht = new HandlerThread("foo");
ht.start();
Handler processHandler = new Handler(ht.getLooper());

然后在线程上执行您的任务:

@Override
public void onItemAdded(final Object object) {
    processHandler.post(new Runnable() {
        @Override
        public void run() {
            new ProcessTask().execute((String) object);
        }
    });
}