????(3) ??????????????????
class ImageLoaderFactory {
private static ImageLoader mImageLoader;
private ImageLoaderFactory() {
//no instance
}
/**
* @return
*/
public static ImageLoader createImageLoader(String implClass) {
if (mImageLoader == null) {
mImageLoader = createImageLoaderWithClassName(implClass);
}
return mImageLoader;
}
/**
* ?????????? ????implClass??????????? ????????keep:  {@code -keep class a.b.c.ImplClass}
* @param implClass ???????: FrescoImageLoader?? GlideImageLoader?? PicassoImageLoader?? UILImageLoader
* @return
*/
private static ImageLoader createImageLoaderWithClassName(String implClass) {
try {
Class klass = Class.forName(implClass);
Constructor constructor = klass.getDeclaredConstructor();
if (constructor == null) {
throw new RuntimeException(implClass + " ?????????????????ι????? !");
}
boolean isAccessible = constructor.isAccessible();
constructor.setAccessible(true);
Object obj = constructor.newInstance();
constructor.setAccessible(isAccessible);
if ( !(obj instanceof ImageLoader) ) {
throw new RuntimeException(implClass + "???????" + ImageLoader.class.getName() + "???");
}
ImageLoader imageLoader = (ImageLoader) obj;
return imageLoader;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}
????(4) ????ImageLoader?? ????ù???????????? ?????????????????????? ????????????????. ????????????? ????????????????????. ?????????y???????????????????. ??????ImageLoader????????????????:


????
??????????? ???????

????(5) ????????ù???????ImageLoader???????
import android.content.Context;
public final class ImageManager {
private static String TAG = "ImageManager";
private static ImageLoader sImageLoader;
private ImageManager() {
//no instance
}
public static void init(Context appContext) {
if (sImageLoader != null) {
throw new IllegalStateException(TAG + " already initalized");
}
sImageLoader = ImageLoaderFactory.createImageLoader("com.stone.app.manager.imageloader.internal.FrescoImageLoader");
sImageLoader.init(appContext);
}
public static ImageLoader getImageLoader() {
return sImageLoader;
}
}
???????:
?????????????????? ???????????????????У? ????????????????е? (??????????η?).
???????幤???? ??÷????????????.
???????????????????????????????? ?????????????????.