package com.buaa.shortytall.view; import android.content.Context; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; import android.view.LayoutInflater; import android.view.View; import java.lang.ref.WeakReference; public class AsyncInflater { private static AsyncInflater instance; private HandlerThread handlerThread; private Handler inflateHandler; static { if (instance == null) { instance = new AsyncInflater(); } } private AsyncInflater() { handlerThread = new HandlerThread("inflate thread", Process.THREAD_PRIORITY_DEFAULT); handlerThread.start(); inflateHandler = new Handler(handlerThread.getLooper()); } public static AsyncInflater getInstance() { return instance; } public void asyncInflate(final LayoutInflater inflater, final int layoutId, final WeakReference<Handler> handlerRef, final WeakReference<InflateListener> listenerRef) { postInflate(inflater, layoutId, handlerRef, listenerRef); } private void postInflate(final LayoutInflater inflater, final int layoutId, final WeakReference<Handler> handlerRef, final WeakReference<InflateListener> listenerRef) { if (handlerRef != null) { Handler handler = handlerRef.get(); if (handler != null) { handler.post(new Runnable() { @Override public void run() { View view = inflater.inflate(layoutId, null); InflateListener listener = listenerRef.get(); if (listener != null) { listener.onInflatedView(view); } } }); } } } }