【问题标题】:Best way to process objects one by one in Android在Android中一一处理对象的最佳方法
【发布时间】:2014-11-29 05:50:02
【问题描述】:

我创建了一个 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 有点大,有没有办法一个一个地处理添加的项目?

【问题讨论】:

    标签: android arraylist android-asynctask task


    【解决方案1】:

    你的意思是你想在一个单独的线程上运行你的调用 ProcessTask.execute,一次一个,而不用完 UI 线程?不确定我是否理解正确,但如果这是您的意思,那么您可以使用在其自己的线程上运行的处理程序,并将 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);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多