Android开源框架——Picasso
开篇——介绍Picasso
(Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即Android平台的网络图片下载和缓存框架。
(Picasso如何使用?)框架嘛!既然牛人能够写出这个框架,自然使用流畅。不用担心,很简单,但深入源代码就需要花点功夫。
(为什么会出现Picasso框架?)Android开发中,常需要从远程服务器端获取图片;一般情况下,我们会使用HttpURLConnection(java.net.HttpURLConnection)和AsyncTask(android.os.AsyncTask)结合实现该功能;但还需要考虑其他情况:图片缓存和下载管理(??),因此聪明的做法是:封装成自己的工具类,或者是使用第三方框架(比如这里的Picasso)。
热身运动——HttpUrlConnection和AsyncTask实现网络图片下载
在使用Picasso框架之前,先来一个热身运动:使用HttpUrlConnection(java.net.HttpUrlConnection)和AsyncTask(android.os.AsyncTask)实现网络图片加载。
activity_main.xml文件方面,LinearLayout的垂直布局中布置两个控件:ImageView和Button;Button的点击事件触发网络图片请求和加载内存(即:显示图片)。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <ImageView
android:id="@+id/iv_image"
android:layout_width="200dp"
android:layout_height="200dp" /> <Button
android:onClick="loadImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="loading..." /> </LinearLayout>
AndroidManifest.xml文件方面,添加网络请求的用户权限。
<uses-permission android:name="android.permission.INTERNET"/>
MainActivity.java方面:
package com.fenix.picassodemo; import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView; public class MainActivity extends Activity { private ImageView mIView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
mIView = (ImageView) findViewById(R.id.iv_image);
} private class ImageDownloadTask extends AsyncTask<String, Void, Bitmap> { ImageView iv; public ImageDownloadTask(ImageView iv) {
this.iv = iv;
} @Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected Bitmap doInBackground(String... imgAddress) {
URL imgUrl = null;
HttpURLConnection connection = null;
InputStream inputStream = null;
Bitmap bitmap = null; try {
imgUrl = new URL(imgAddress[0]); // 将网络图片路径转化为URL实例 connection = (HttpURLConnection) imgUrl.openConnection();
connection.setDoInput(true);
connection.connect(); inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} return bitmap;
} @Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result); iv.setImageBitmap(result);
}
} public void loadImage(View v) {
new ImageDownloadTask(mIView).execute("http://pic32.nipic.com/20130829/12906030_124355855000_2.png");
} }
点击布局文件中的Button,执行loadImage(),即网络图片请求;网络请求不应该被写在主线程中,因此需要借助AsyncTask工具(封装Handler和Thread);一旦点击Button,即执行ImageDownloadTask。
图片资源来自:www.baidu.com的图片库(右键-》复制图片地址)。
AsyncTask结合HttpURLConnection,确实可以实现网络图片的请求,但问题是:Android应用程序(从网络图片角度),还比如:管理图片下载请求,合理使用内存等方面都需要考虑(Google工程师——极致体验的代言人)。这就是为什么出现了这么多类似于Picasso图片请求框架的缘故!当然还有很多开源框架需要熟悉(后续再说呗)。
Picasso框架——初体验
Android开源框架——Picasso的更多相关文章
- Android 开源框架Universal-Image-Loader学习
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/39057201),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android进阶笔记13:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)
1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListen ...
- android 开源框架推荐
同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JS ...
- Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android开源框架Afinal第一篇——揭开圣女的面纱
Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...
- 六款值得推荐的Android开源框架简介
技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...
- Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告
原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...
随机推荐
- OFBIZ:启动之ContainerLoader
ContainerLoader类实现StartupLoader接口,目的是装入各种Container容器. /** * An OFBiz container. A container can be t ...
- Django model中常见Field types , Field options
AutoField :自增,数据库 BooleanField:布尔型 CharField:字符型 DateField:日期,datetime.date类的实例.有两个常用的option,auto_no ...
- Web服务器禁止range请求
range: 请求一般是多线程下载的客户端程序使用 在httpd.conf中增加下面的配置,可以禁止range请求: RewriteEngine onRewriteCond %{HTTP:Range} ...
- Spark JdbcRDD 简单使用
package org.apache.spark.sql.sources import org.apache.spark.SparkContext import java.sql.{ResultSet ...
- linux文件权限表示及用户权限管理
UNIX/Linux下关于文件执行权限的表示和查看想必是最熟悉不过的,然而你是否真正了解用户文件的权限标识和用户的权限呢? 实际上文件权限标识不仅仅只有U, G, O 11 10 9 8 7 6 5 ...
- HTML中的下拉列表 select
HTML中的下拉列表: <select> <option value ="1">Volvo</option> <option value ...
- android自定义圆形图片和遇到的问题
画圆遇到的问题:图片单位不一样,导致图片只能显示出圆的一部分:看代码: public class MyCircleIamge extends ImageView { private Context c ...
- singleTask, singleInstance使用心得
1. singleTask, singleInstance 共同点: 1) 一旦入栈,都为于栈底. 2) 全栈有且只有一个activity实例对象. 2. singleTask, singleIns ...
- tomcat7的安装与配置、及Servlet部署
一.tomcat7的下载页面 https://tomcat.apache.org/download-70.cgi 就是:32-bit Windows zip 下载得到apache-tomcat-7.0 ...
- 《高性能JavaScript》笔记
1. UI Thread 和 UI Queue,中文叫 UI 线程和UI 队列,JavaScript 和 UI 更新共享的进程通常被称为浏览器UI进程. 2. 如果用户企图在任务运行时于页面交互,不 ...