我创建了一个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非常大,有没有办法逐个处理添加的项目?
答案 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);
}
});
}