package com.cheng.multithreadstudy.sunframework.proxy; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import com.cheng.multithreadstudy.sunframework.proxy.callback.AsyncMethodAtomInterceptor; import com.cheng.multithreadstudy.sunframework.proxy.callback.Interceptor; import com.cheng.multithreadstudy.sunframework.proxy.filter.AsyncMethodFilter; import java.io.File; public class ControlFactory { private static File mCacheDir; public static void init(Context context) { int version = getVersionCode(context); for (int i = 1; i < version; i++) { File file = context.getDir(i + "", Context.MODE_PRIVATE); deleteDirection(file); } mCacheDir = context.getDir(version + "", Context.MODE_PRIVATE); } private static int getVersionCode(Context context) { try { PackageManager packageManager = context.getPackageManager(); PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0); return packInfo.versionCode; } catch (Exception e) { e.printStackTrace(); } return 0; } private static boolean deleteDirection(File file) { if (file.exists() && file.isDirectory()) { File[] files = file.listFiles(); int length = files.length; for (int i = 0; i < length; i++) { files[i].delete(); } file.delete(); } return false; } /** * control 代理工厂 * * @param clazz * @return */ public static <T> T getControlInstance(Class<T> clazz, MessageProxy mMethodCallBack) { Enhancer<T> enhancer; if (mMethodCallBack != null) { enhancer = new Enhancer<T>(mCacheDir, clazz, new Class[]{mMethodCallBack.getClass()}, new Object[]{mMethodCallBack}); } else { enhancer = new Enhancer<T>(mCacheDir, clazz); } /** * 添加拦截器 */ enhancer.addCallBacks(new Interceptor[]{new AsyncMethodAtomInterceptor(mMethodCallBack)}); /** * 添加过滤器 */ enhancer.addFilter(new AsyncMethodFilter()); return enhancer.create(); } /** * 构建无参数构造函数 * * @param clazz * @return */ public static <T> T getControlInstance(Class<T> clazz) { return getControlInstance(clazz, null); } }