package com.elphin.framework.util.acd; import android.os.Handler; import android.os.Looper; import android.view.View; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * Created with IntelliJ IDEA. * User: guangongbo * Date: 13-6-25 * Time: 下午5:51 */ public class ActionBinding { private static final ExecutorService SERVICE = new ThreadPoolExecutor(0, 1, 120, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); private static final Handler HANDLER = new Handler(Looper.getMainLooper()); private Object mOwner; private Binder mBinder; private BindingFinder mFinder; private View mParent; private Runnable mInternalRunnable = new Runnable() { @Override public void run() { final BindingBean[] beans = mFinder.finding(mOwner.getClass()); for (int i = 0, len = beans.length; i < len; ++i) { beans[i].binding(mOwner, mParent); } // 发消息通知 HANDLER.post(new Runnable() { @Override public void run() { mBinder.onBinded(); } }); } }; public ActionBinding(Binder mBinder, View parent) { this(mBinder, mBinder, parent); } public ActionBinding(Object mOwner, Binder mBinder, View parent) { if (mOwner == null || mBinder == null || parent == null) { throw new NullPointerException(); } this.mOwner = mOwner; this.mBinder = mBinder; mParent = parent; mFinder = new BindingFinder(); } public void startBinding() { SERVICE.execute(mInternalRunnable); } }