1. 前言
每种编程语言都有其相应的框架,而Android也不例外;那么Android的框架到底有多少种,且其框架相应的特点与构成又是如何的呢?接下来,就让我们一起去学习一下Android的一些常用框架。
2. Android常用框架的构成图
我把我目前所知晓得的一些Android常用的框架以构成图的形式进行展示,从而使Android的常用框架可以更加清晰明了的展现出来,构成图如下:
3. Android常用框架
通过以上的Android常用框架的构成图,我们可以晓得本篇博文主要对这七个常用框架进行相应的讲解。
3.1 图片加载
3.1.1 Universal Image Loader
3.1.1.1 添加依赖
Maven
<dependency>
<groupId>com.nostra13.universalimageloader</groupId>
<artifactId>universal-image-loader</artifactId>
<version>1.9.5</version>
</dependency>
3.1.1.2 特点
1、多线程下载图片,图片可以来源于网络、文件系统、项目文件夹assets和drawable等;
2、支持随意的配置ImageLoader,例如线程池、图片下载器、内存缓存策略、硬盘缓存策略、图片显示选项以及其他的一些配置;
3、支持图片的内存缓存、文件系统缓存或者SD卡缓存;
4、支持图片下载过程的监听;
5、根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存;
6、较好的控制图片的加载过程,例如暂停图片加载、重新开始加载图片,一般使用在ListView、GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片;
7、提供在较慢的网络下对图片进行加载。
3.1.1.3 流程图
3.1.1.4 常用方法
3.1.1.4.1 配置ImageLoaderConfiguration
通过配置ImageLoaderConfiguration类来实现全局ImageLoader的实现情况;以下代码根据个人的需求进行相应的更改。
//获取缓存文件
File cacheDir = StorageUtils.getCacheDirectory(this);
//设置自定义缓存的目录
cacheDir = StorageUtils.getOwnCacheDirectory(this,"imageloader/Cache");
//初始化ImageLoad
ImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480,800)//设置缓存图片的默认尺寸,一般取设备的屏幕尺寸
.diskCacheExtraOptions(480,800, null)
.threadPoolSize(3)// 线程池内加载的数量,default = 3
.threadPriority(Thread.NORM_PRIORITY-2)
.tasksProcessingOrder(QueueProcessingType.FIFO)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(newLruMemoryCache(2*1024*1024))//自定义内存的缓存策略
.memoryCacheSize(2*1024*1024)
.memoryCacheSizePercentage(13)// default
.diskCache(newUnlimitedDiskCache(cacheDir))// default
.diskCacheSize(50*1024*1024)
.diskCacheFileCount(100)//缓存的文件数量
.diskCache(newUnlimitedDiskCache(cacheDir))//自定义缓存路径
.diskCacheFileNameGenerator(newHashCodeFileNameGenerator())// default
.imageDownloader(newBaseImageDownloader(this))// default
.imageDecoder(newBaseImageDecoder(true))// default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default
.writeDebugLogs()
.build();
3.1.1.4.2 加载图片
在使用ImageLoader进行图片加载的时候,先要实例化ImageLoader,在每个布局里面都要实例化后再使用。
protectedImageLoader imageLoader = ImageLoader.getInstance();
3.1.1.4.3 显示图片
1、加载一张网络图片
ImageLoader.getInstance().displayImage(imageUrl, imageView);
2、加载一张网络图片并自定义配置
ImageLoader.getInstance().displayImage("图片地址",mImageView,mOptions);
3、加载一张图片并对图片的加载过程进行监听
ImageLoader.getInstance().displayImage("图片地址",mImageView2,mOptions, newImageLoadingListener() {
@Override
public voidonLoadingStarted(String imageUri,View view) {
//开始加载
}
@Override
public voidonLoadingFailed(String imageUri,View view,FailReason failReason) {
//加载失败
}
@Override
public voidonLoadingComplete(String imageUri,View view,Bitmap loadedImage) {
//加载完成
}
@Override
public voidonLoadingCancelled(String imageUri,View view) {
//取消加载
}
});
4、图片加载时候,带监听又带加载进度条的情况调用:
imageLoader.displayImage(imageUrl, imageView, options,newImageLoadingListener() {
@Override
publicvoidonLoadingStarted() {
//开始加载的时候执行
}
@Override
publicvoidonLoadingFailed(FailReason failReason) {
//加载失败的时候执行
}
@Override
publicvoidonLoadingComplete(Bitmap loadedImage) {
//加载成功的时候执行
}
@Override
publicvoidonLoadingCancelled() {
//加载取消的时候执行
},newImageLoadingProgressListener() {
@Override
publicvoidonProgressUpdate(String imageUri, View view,intcurrent,inttotal) {
//在这里更新 ProgressBar的进度信息
}
});
3.1.1.5 注意点
1、ImageLoaderConfiguration必须配置并且全局化的初始化这个配置ImageLoader.getInstance().init(config),否则会出现错误提示;
2、ImageLoader是根据ImageView的height,width确定图片的宽高;
3.1.2 Picasso
3.1.2.1 添加依赖
Maven
<dependency>
<groupId>com.squareup.picasso</groupId>
<artifactId>picasso</artifactId>
<version>2.5.2</version>
</dependency>
3.1.2.2 简单的加载图片
Picasso使用的是链式编程,它至少需要三个参数才能完成基本地图像请求
- with(Context context)——很多Android API都会去如此调用,这里也没有什么区别
- load(String imageUrl)——应该加载哪个图像,大多数情况下,我们会使用String来代表一个url图像
- into(ImageView targetImageView)——目标显示的ImageView
举个例子,就可以很容易明白,并且应用
ImageView targetImageView = (ImageView) findViewById(R.id.imageView);
String internetUrl = "http://i.imgur.com/DvpvklR.png";
Picasso
.with(context)
.load(internetUrl)
.into(targetImageView);
3.1.2.3 常用方法
3.1.2.3.1 资源加载
int resourceId = R.mipmap.ic_launcher;
Picasso
.with(context)
.load(resourceId)
.into(imageViewResource);
3.1.2.3.2 文件加载
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Running.jpg");
Picasso
.with(context)
.load(file)
.into(imageViewFile);
3.1.2.3.3 Uri加载
Uri uri = resourceIdToUri(context, R.mipmap.future_studio_launcher);
Picasso
.with(context)
.load(uri)
.into(imageViewUri);
public static final String ANDROID_RESOURCE = "android.resource://";