대상을 향한 6대 원칙 중 하나
단일 직책 원칙(코드 최적화의 첫걸음)
public class ImageLoader {
//
public LruCache bitmapLruCache;
// cup
ExecutorService executorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public ImageLoader() {
initCache();
}
/***
*
*/
public void initCache() {
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 4; //
bitmapLruCache = new LruCache(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
//
}
};
}
/**
*
*
* @param url
* @param imageView
*/
public void displayImage(final String url, final ImageView imageView) {
imageView.setTag(url);
executorService.submit(new Runnable() {
@Override
public void run() {
Bitmap bitmap = downloadImage(url);
imageView.setImageBitmap(bitmap);
//
bitmapLruCache.put(url, bitmap);
}
});
}
/**
*
*
* @param url
*/
private Bitmap downloadImage(String url) {
Bitmap bitmap = null;
try {
URL url1 = new URL(url);
HttpURLConnection httpURLConnection = (HttpURLConnection)
url1.openConnection();
bitmap = BitmapFactory.decodeStream(httpURLConnection.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}
이러한 기능은 하나의 클래스에 쓰여져 있다. 그 중의 한 방법의 코드가 바뀔 때 다른 것도 따라서 바뀐다. 그래서 우리는 코드를 더욱 유연하고 확장시켜야 한다. 캐시 기능과 다운로드 디스플레이 기능을 분리해서 쓸 수 있다.
![ UML ](http://note.youdao.com/favicon.ico)
public class ImageCache {
//
public LruCache bitmapLruCache;
// cup
ExecutorService executorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public static ImageCache imageCache;
public static ImageCache getInstache() {
if (imageCache == null) {
imageCache = new ImageCache();
}
return imageCache;
}
public ImageCache() {
initCache();
}
/** */
public void initCache() {
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 4; //
bitmapLruCache = new LruCache(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024; //
}
};
}
public void put(String url, Bitmap bitmap) {
bitmapLruCache.put(url, bitmap);
}
public Bitmap getBitmap(String url) {
if (bitmapLruCache != null) {
return bitmapLruCache.get(url);
}
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.