怎么改用移动流量仪加载失败可以加载图片

教你怎么更省流量刷空间,微博-Android之异步加载网络图片_数据库事宜与并发【转】_施用JMagick+ImageMagick处理图片__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
教你怎么更省流量刷空间,微博-Android之异步加载网络图片
数据库事宜与并发【转】
施用JMagick+ImageMagick处理图片
教你怎么更省流量刷空间,微博-Android之异步加载网络图片
教你如何更省流量刷空间,微博---Android之异步加载网络图片
朋友你是否有过这样的经历,当你刷空间,刷微博的时候,有的时候那些图片加载要很长时间,有的却直接可以看到无需慢慢等待,尤其是那些你已经刷过的内容,即使你处于断网的状态下也能看到,往往这种客户体验相对而言比较好,但是有的时候我们清理了手机的一些垃圾后,就不一样了,我们还得从新刷出来,下面我就要说说这个原理了。
这所有的实现都是通过异步加载产生的,原理就是在我们运行软件时,我们需要将一些图片显示出来,那这些图片要从哪里获取呢,我们可以通过以下的方式获取,先看一张流程图:
首先我们先从map缓存中获取图片,map就是我们先前已经下载好的图片的集合,如果没有,我们查找图片文件,看是否有相应的文件,如果没有我们就开辟一个线程下载图片,等图片下载完成后,我们就将图片的url和图片放到map集合中。下一次再次刷新时,我们就直接从文件中读取已经存在的图片。到这里你应该知道如何更省流量得刷空间了吧,但是我们要实现这种功能额。下面我讲解一下核心代码:
首先我们创建这样一个类LazyImageLoader,类里面有下面的方法
public Bitmap get(String url,ImageLoaderCallback callback)
Bitmap bitmap =
//先看map集合众是否有这个url的图片
if(imgManger.contains(url))
//直接获取
bitmap = imgManger.getFromCache(url);
callbackManager.put(url, callback);
//开启线程下载
startDownLoadTread(url);
//先返回一个默认的图片
return getDefaultImag(R.drawable.user_head);
首先我们先从map中查看是否有这个url的图片,如果有直接返回,如果没有开启线程下载,同时先返回一个固定的默认图片接下来我们就要看一下ImgManger中关于图片文件获取的主要方法了:
首先我们新建一个map如下Map&String, SoftReference&Bitmap&&imgC至于SoftReference是什么,我就不说了,在这里主要是提高运行速度。
首先我们先从上面定义的map中查找,代码如下:
public Bitmap getFromMapCache(String url)
Bitmap bitmap =
SoftReference&Bitmap& ref =
synchronized (this)
ref = imgCache.get(url);
if(null != ref)
bitmap = ref.get();
这里我们要注意防止线程同步的出现加关键词synchronized;
如果没有,我们再从查找文件,看是否存在,这里我遇到了一个问题,同时我也明白了一件经常看到的事,显然我们要下载的图片的url是如http://www.xxx/xxx.png这样的格式,那我们将下载的文件命名保存呢?如果我们直接以url保存,那最后是读取和保存的,如果我们重命名,那么首先我们要怎样才能确定保存的是独一无二的呢,其次读取时又要按先前对文件命名的规则对URL解析然后再获取图片,这样一来将会影响读取的速度,那解决办法是有的,通过使用加密算法对url直接加密生成一个独一无二的摘要即可,在这里我直接通过Md5进行加密,到这里你应该明白有时候我们看到的文件的名字是23d4c0e84e1e807e56e324,115d7b1cb1之类的吧。下面我们继续写代码:
public Bitmap getFromFile(String url)
String fileName = this.getMd5(url);
FileInputStream is=
is=context.openFileInput(fileName);
return BitmapFactory.decodeStream(is);
catch (FileNotFoundException e)
e.printStackTrace();
if(null != is)
try{is.close();}catch(Exception ex){};
上面是直接从文件中查找图片,如果此时还没有,那么我们只有开启线程,通过线程来下载我们所需的图片,再将图片写到文件在写文件的时候文件名是也需要通过md5加密的。线程中主要的代码如下:
public Bitmap downloadImg(String urlStr) throws HttpException
URL url = new URL(urlStr);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
String fileName=writerToFile(urlStr,connection.getInputStream());
return BitmapFactory.decodeFile(fileName);
catch (IOException e)
e.printStackTrace();
上面是通过http从网络中获取数据,其中的writerToFile方法如下:
public String
writerToFile(String fileName, InputStream is)
BufferedInputStream bis =
BufferedOutputStream bos =
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(context.openFileOutput(MD5Utils.md5(fileName), Context.MODE_PRIVATE));
byte[] buffer = new byte[1024];
while((length = bis.read(buffer)) != -1)
bos.write(buffer, 0, length);
} catch (Exception e)
if(null != bis)
bis.close();
if(null != bos)
bos.flush();
bos.close();
catch (IOException e)
e.printStackTrace();
return context.getFilesDir() + "/" + MD5Utils.md5(fileName);
主要是快速读写文件的操作,挺简单的,不懂直接百度,最后当我们的文件写好了,再通过回调的方法将图片显示出来就行了。下面是我写的小项目的测试,效果还是挺好的,
异步加载的源码我放在下面,稍微改一下可以直接用,直接调用类SimpleImageLoader 中的showImg(ImageView view,String url);方法即可。
数据库事宜与并发【转】
数据库事务与并发【转】数据库事务中的基本概念
据库事务是指,由一个或多个SQL语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果有一个SQL语句失败,那么整个操作都要撤销。在并发环
境中,当多个事务同时访问同一资源时,可能会造成并发问题,此时可以使用数据库系统的事务隔离级别来避免各类并发问题。此外,在应用程序中还可以使用悲观
锁和乐观锁来解决丢失更新的并发问题。
数据库事务必须具备ACID的特征(Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性)
原子性,指整个数据库事务是不可分割的单元。只有所有的语句执行成功,才算成功。
一致性,指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性,指在并发环境中,当不同的事务同时操作相同的数据时,每个事务都有各自的完整数据空间。
持久性,指的是只要事务成功结束,对数据库做的更新要永久保存下来.
Transaction和Session的关系,应该注意以下几点
Transaction的rollback()和Session的close()方法都会抛出HibernateException
不论事务是否成功,最后都应该关闭Session。
即使事务中只包含只读操作,也应该在事务成功执行之后提交事务,并且在事务执行失败时撤销事务,因为在提交或撤销事务时,数据库系统会释放占用的资源。
多个事务同时运行时的并发问题
第一类丢失更新,撤销一个事务时,把其他事务已提交的更新数据覆盖了。
脏读,一个事务读到另一个事务未提交的更新数据。
虚读,一个事务读到另一个事务已提交的新插入的数据。
不可重复读,一个事务读到另一个事务已提交的更新数据。
第二类更新,一个事务覆盖另一事务已提交的更新数据。
数据库系统锁的基本原理
按照锁定的资源的粒度,锁可以分为以下类型
数据库级锁: 锁定整个数据库
表级锁: 锁定一张表
区域级锁: 锁定数据库的特定区域
页面级锁: 锁定数据库的特定页面
见面级锁: 锁定数据库的特定页面
键值级锁: 锁定数据库表中带有索引的一行数据。
行级锁: 锁定数据库表中的但行数据(即一条记录)
按照封锁的程度,锁可以分为: 共享锁,独占锁,更新锁
共享锁, 共享锁用于读数据操作,它是非独占的,允许其他事务同时读取其锁定的资源,但不允许其他事务更新数据。共享锁的特征:
加锁条件:当一个事务执行Select操作时,数据库系统就会为其分配一把共享锁,来锁定查询数据。
解锁条件:在默认情况下,数据读取完毕,共享锁就解除了。
与其他锁的兼容性:如果数据资源上放置了共享锁,还能再放置共享锁和更新锁。
并发性能:具有良好的并发性能,当多个事务读相同的数据时,每个事务都会获得共享锁,因此可以同时读锁定的数据。
独占锁,也叫排它锁,适用于修改数据的场合。它锁定的资源,其他事务不能读取也不能更新。独占锁具有以下特征:
加锁的条件:当一个事务执行insert、update、或delete语句时,数据库就会为SQL所操作的数据使用独占锁。如果数据上有其他锁,那么就能放置独占锁.
解锁条件:到事务结束时才能被解除
与其他锁的兼容性:独占锁不能和其他锁兼容。通用如果资源上有其他锁,那么也不能放置独占锁。
并发性能:性能较差,只允许有一个事务访问锁定的数据,如果其他事务也需要访问该数据,就必须等待,直到前一个事务结束,解除了独占锁,其他事务才有机会访问资源。
更新锁,在更新操作的初始化阶段用来锁定可能要被修改的资源,这可以避免使用共享锁造成死锁的现象。更新具有以下特征:
加锁的条件:当一个事务执行update语句时,数据库系统会先为事务分配一把更新锁。
解锁条件:读取数据完毕,执行更新操作时,会把更新锁升级为独占锁。
与其他锁的兼容性:更新锁与共享锁是兼容的。也就是说,一个资源可以同时放置更新锁和共享锁,但是最多只能放置一把更新锁。
并发性能:允许多个事务同时访问资源。但不允许修改。
死锁及其防止方法
合理安排表的访问顺序
使用短事务。将大事务分割为多个小事务执行。应该在处理事务之前就准备好用户必须提供的数据。
如果对数据的一致性要求不高,可以允许脏度。
如果可能,错开多个事务访问相同数据资源的时间,以防止锁冲突。
使用尽可能低的事务级别。
数据库的隔离级别
尽管数据库系统允许用户在事务中显示的为数据资源加锁,但是首先应该考虑让数据库系统自动管理锁,它会分析事务中的SQL语句,然后自动为SQL语句所操作的数据资源加上合适的锁,而且在锁的数目太多时,数据库系统会自动的进行锁升级,以提供系统性能。
数据库系统提供了四种事务隔离级别供用户选择:
Serializable,串行化。
一个事务在执行过程中完全看不到事务对数据库所做的更新。当两个事务同时操作数据库中的数据时,如果第一个事务已经在访问该数据,那么第二个事务只能停下来等待。
Repeatable Read:可重复读
一个事务在执行过程中可以看到其他事务已经提交的新插入的数据。但是不能看到其他事务对已有数据做的跟新。
Read Commited:读已提交数据
一个事务在执行过程中可以看到其他事务已经提交的新插入的数据。可以看到其他对已有数据进行的更新。
Read UnCommited:读取未提交
一个事务可以看到,其他事务没有提交新插入的数据。而且更新操作的记录也能看到。
//: 在hibernate.cfg.xml中配置
hibernate.connection.isolation=2
在应用程序中才用悲观锁和乐观锁
悲观锁与乐观锁的概念
悲观锁,在应用程序中显示的为数据资源加锁。可以防止丢失更新和不可重复读问题。但是会影响性能。
乐观锁,假设当前的事务操作的数据,不会有其他事务同时访问该数据资源,完全依靠数据库系统自动管理锁。因此可能会出现并发问题。
利用数据库系统的独占锁来实现悲观锁
悲观锁的两种实现方式
应用中显示的指定采用数据库系统的独占锁来锁定数据资源。
在数据库表中增加一个表明记录状态的LOCK字段,当它取值为Y时,表示该i记录已被某个事务锁定。如果为N,表示该条数据为空闲状态。
在Hibernate中,当通过Session的get()和load()方式来加载一个对象时,可以采用以下方式使用悲观锁:
Customer cus = (Customer)session.get(Customer.class, "c001", LockMode.UPGRADE); //: final org.hibernate.LockMode
LockMode类表示的几种锁定模式
锁定模式 描述
LockMode.NONE 如果在Hibernate缓存中存在Customer对象,就直接返回该引用。否则通过select加载。默认值
LockMode.READ 不管缓存中是否有,都使用select加载数据。如果映射文件设置了版本元素,就执行版本检查,比较缓存中的与取到的是否版本一致。
LockMode.UPGRADE 不管缓存中是否有,都使用select加载数据。就执行版本检查,比较缓存中的与取到的是否版本一致。如果数据库系统支持悲观锁,那么执行select…for update, 否则执行简单的select
LockMode.UPGRADE_NOWAIT 会执行LockMode.UPGRADE和它一样的功能。若果执行的select不能立即获得悲观锁,那么就会抛出异常
LockMode.WRITE 当Hibernate保存或更新对象时,会自动使用这种锁定模式。这种锁定模式只在Hibernate内部使用,所以在应用中不应该使用它
利用Hibernate的版本控制来实现乐观锁
create table Accounts (
id bigint primary key,
name varchar(15),
balance numeric(10,2),
LAST_UPDATED_TIME timestamp,
version int
在hbm中配置版本控制
//: 在元素必须跟在&id&元素的后面
&version name = "version" column = "VERSION" /&
//: 使用该元素也可以实现版本控制
&timestamp name=”lastUpdateTime” column=” LAST_UPDATED_TIME” /&
对游离对象进行版本检查
Session session1 = ....;
trans1 = session1.beginTransaction();
Account a = (Account)session1.get(Account.class, new Long(1));
session1.close();
a.setBalance(a.getBalance()-100);
Session session2 = ...;
trans2 = session2.beginTransaction();
session2.lock(a, LockMode.READ);
session2.close();
lock() 方法和update()方法之间的区别
lock()方法在LockMode.READ模式下,立即进行版本控制。而update()方法不会立即执行版本检查,只有当Session清理缓存时,真正执行update时才进行版本检查
lock()在默认的LockMode中不会执行update语句。而update()会计划执行一个update语句,如果数据库中没对应的记录那么会抛出异常。
实现乐观锁的其他方式
&class optimistic-lock="all" dynamic-update="true"&
//: optimistic-lock=all/dirty 时必须设置dynamic-update为true
施用JMagick+ImageMagick处理图片
使用JMagick+ImageMagick处理图片
使用JMagick+ImageMagick处理图片一、ImageMagick介绍ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。ImageMagick 的官网是:http://www.imagemagick.org/script/index.php由于我们是java项目,直接使用java通过JNI技术调用ImageMagick是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是/twall/jna。使用JNA来调用ImageMagick就须要直接操作ImageMagick提供的C接口(API)。二、windows环境的安装在windows安装很简单,关于Q8与Q16区别,将在后面进行说明。有动态版(dll),有静态版(static),建议使用静态版。关于Q8,Q16,Q32的说明:Q8表示: 8-bits per pixel quantumQ16表示:16-bits per pixel quantum在Install-unix.txt文件中的解释说明,避免翻译的不好误导大家,请大家自己去看原文吧。大意是:大多数电脑显示使用8-bit per pixel quantums。使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。处理一张像素的图片8-bit要使用3M内存,16-bit要使用8M内存,32-bit需要使用15M内存8-bit可表示0-255种值,16-bit可表示0-65535种值,32-bit可表示0-种值。默认值是8-bit.如果安装Q8,请使用文件:ImageMagick-6.3.9-0-Q8-windows-dll.exejmagick-win-6.3.9-Q8.zip如果安装Q16,请使用文件:ImageMagick-6.3.9-0-Q16-windows-dll.exejmagick-win-6.3.9-Q16.zip1.首先给出这个地址:http://downloads.jmagick.org/6.3.9/,这个里面包含了ImageMagick的安装文件、jmagick.dll和jmagick.jar,最关键的是它们是版本一致的,不会出现一些奇怪的问题。最容易出现的问题是:java.lang.UnsatisfiedLinkError: jmagick.dll: The specified procedure could not be foundjava.lang.UnsatisfiedLinkError: jmagick.dll: Can't find dependent libraries....我下载的文件:ImageMagick-6.3.9-0-Q16-windows-dll.exe 32位windows下的动态连接库安装文件jmagick-win-6.3.9-Q16.zip里面包含了jmagick.dll和jmagick.jar2.安装过ImageMagick后,最好重启一下电脑,否者可能会出现找不到依赖库的错误。解压jmagick-win-6.3.9-Q16.zip,将其中的jmagick.dll复制到C:\WinNT\system32下面。在编写程序时,要将jmagick的jar包放到编译路径中,Eclipse会搞定这件事情。这样就完成了,很简单。至于如何使用jmagick编写程序,可以参考:http://downloads.jmagick.org/jmagick-doc/三、 Linux环境的安装由于没有图形化界面的支持,在Linux(OpenSuSE11 x64)上的配置相对Windows XP还是麻烦了一点。前题:服务器如果没有安装Jpeg v8b、libPng、FreeType 的要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了.1、 查看libjpeg是否已安装 (rpm –qa|grep libjpeg)卸载:rpm -e --nodeps libjpeg-6.2.0-879.10rpm -e --nodeps libjpeg-32bit-6.2.0-879.10安装:rpm -ivh libjpeg8-8.0.2-3.1.x86_64.rpm rpm -ivh libjpeg8-devel-8.0.2-3.1.x86_64.rpm2、 查看libpng是否已经安装 (rpm -qa|grep libpng检查是否已经安装)卸载:rpm -e --nodeps libpng12-0-32bit-1.2.31-5.12.1rpm -e --nodeps libpng12-0-32bit-1.2.31-5.12.1安装:rpm -ivh libpng-1.2.5-190.1.x86_64.rpm rpm -ivh libpng-devel-1.2.5-190.1.x86_64.rpm问题:rpm -ivh libpng-devel-1.2.5-190.1.x86_64.rpmerror: Failed dependencies: zlib-devel is needed by libpng-devel-1.2.5-190.1.x86_64
解决办法:请先执行如下第3步操作再安装libpng-devel-1.2.5-190.1.x86_64.rpm3、 查看zlib是否已安装(rpm -qa|grep zlib)注:在卸载zlib时一定不要将zlib-1.2.3-106.34给卸载了,否则系统将无法运行。卸载:rpm -e --nodeps zlib-32bit-1.2.3-106.34安装:rpm -U zlib-1.2.3-134.1.x86_64.rpm rpm -ivh zlib-devel-1.2.3-134.1.x86_64.rpmImageMagick和Jmagick的安装步骤: 1、下载ImageMagick和JMagick的源文件(http://downloads.jmagick.org/6.4.0/):ImageMagick-6.4.0.-0tar.gz 和 jmagick-6.4.0-src.tar.gz。2、解压并安装ImageMagick:# tar xzvf ImageMagick-6.4.0-0.tar.gz# cd ImageMagick-6.4.0
# ./configure --prefix=/usr/local/ImageMagick-6.4.0 --enable-shared --with-quantum-depth=8 --enable-static --without-perl# make# make install# make check安装完成后,运行convert -version命令检测,应该会出现:Version: ImageMagick 6.4.0 08/31/10 Q16 http://www.imagemagick.orgCopyright: Copyright (C)
ImageMagick Studio LLCconvert默认安装到了/usr/local/bin下面,上面的命令可能提示找不到convert命令。那么可以添加如下环境变量即可使用。3. 修改配置文件:# vi /etc/profile在/etc/profile文件的最后增加如下配置:export JAVA_HOME=/usr/java/javaPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATHexport JAVA_HOME PATH CLASSPATHexport MAGICK_HOME="/usr/local/ImageMagick-6.4.0" export PATH="$MAGICK_HOME/bin:$PATH" LD_LIBRARY_PATH=$MAGICK_HOME/lib:/usr/local/lib:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH注意:修改完后执行 ldconfig 让设置立即生效,并logout,然后重新登录。4. ImageMagick安装后究竟支持那些格式的文件,可以使用以下命令完成convert –list configure得到如下图所示:如果没有出现红色框标注的部分,则需要重复上面的2步骤,重新安装imageMagick.5. 在安装JMagick之前先配置环境变量,尤其是JAVA_HOME,否则编译时会出现:JMagick configure: error: 'Unable to locate Java directories'的错误。
6. 安装JMagick。# tar xzvf jmagick-6.4.0-src.tar.gz解压到了文件夹6.4.0中,为了便于区分,重命名该文件夹:# mv 6.4.0 jmagick-6.4.0# cd jmagick-6.4.0# ./configure --prefix=/usr/local/Jmagick-6.4.0 --with-java-home=/usr/java/java --with-magick-home=/usr/local/ImageMagick-6.4.0# make all# make install将生成的libJMagick-6.4.0.so复制到jre中的lib/amd64(amd64可能在不同的硬件架构会有不同的名字,如i386)文件夹中,同时重命名为libJMagick.so。# cd /usr/local/Jmagick-6.4.0/lib# cp libJMagick-6.4.0.so $JAVA_HOME/jre/lib/amd64/libJMagick.so
将jmagick-6.4.0.jar复制到$JAVA_HOME/jre /lib/ext文件夹下,并重命名为jmagick.jar# cp jmagick-6.4.0.jar $JAVA_HOME/jre/lib/ext/jmagick.jar 将jmagick-6.4.0.jar复制到tomcat/common/lib文件夹下,并重命名为jmagick.jar# cp jmagick-6.4.0.jar /home/zxin10/was/tomcat/common/lib/jmagick.jar至此就配置完毕了。7. 测试安装是否正常进入ImageMagick安装目录,cd /usr/local/ImageMagick-6.4.0/binconvert logo: logo.gif
convert logo: logo.png
convert logo: logo.jpg
convert logo: logo.jpeg 可以拷贝生成的文件到本地后查看,应该如下图所示,则说明所有安装均正常:8. 给用户赋权限# chown –R username:groupname /usr/local/ImageMagick-6.4.0 注意:如果在生成jpg时报如下错误:magick.MagickException: Unable to retrievehandle at magick.MagickImage.getDimension(Native Method)
则说明jasper-1.900.1.zip包安装不正确,无法正确处理jpeg2000格式jp2,jpc,需要按照步骤重新安装。注意:如果在生成jpg时报如下错误:magick.MagickException: Unable to retrievehandle at magick.MagickImage.getDimension(Native Method)
则说明jasper-1.900.1.zip包安装不正确,无法正确处理jpeg2000格式jp2,jpc,需要按照步骤重新安装。四、常见问题以及解决方法System.out.println(System.getProperty("java.library.path")). 直接用System.out.println(System.getProperty("java.library.path")). 打印出当前环境的路径,然后再把jmagick.dll或jmagick.so 复制到其中的一个路径文件夹中问题解决。magick.MagickException: No image to scale版本不匹配,要像下面这们,都是同一个版本号ImageMagick-6.4.0-0.tar.gzjmagick-6.4.0-src.tar.gzmagick.MagickException: Unable to retrieve handle要调用 magick.MagickImage.destroyImages() 来关闭no decode delegate for this image format使用:identify -list format判断有支持几种图片格式,没有的则需要安装对应的格式库单线程转换每张图片大概50ms,两个线程却需要500ms?用convert --version
命令查看看是否出现openMP字样,出现的话,是因为机器不支持openMP导致的。需要重新编译./configure --disable-openmp
在进行安装首先检查一下电脑里已经安装的ImageMagick版本:convert -version 记在最后:Ubuntu系统已安装有ImageMagick,只是版本不是我须要的版本,convert文件在放在了/usr/bin,所以我使用/usr/local/ImageMagick-6.4.0/bin目录里的convert覆盖了/usr/bin目录里的convertcd /usr/local/ImageMagick-6.4.0/bincp ./convert /usr/bin
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:如何让图片搜索给你带来源源不断的流量_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何让图片搜索给你带来源源不断的流量
上传于||文档简介
&&如​何​让​图​片​搜​索​给​你​带​来​源​源​不​断​的​流​量
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢当前位置:
区域:市南
来源:个人
价格:150元
新旧程度:全新
青岛联通2G用户&:限量办理0元加1G流量双击查看原图,只要你是联通2G用户&小灵通升级卡&、&
敞开打&、0元卡、&9分卡&等即可参加&协议36个月,当月添加次月执行,双击查看原图&&
电话&:(有偿办理中)(也可以办理10元包&1G省内流量+100分钟通话&&协议36个月&)联系我时请说明是在手递手网看到的,谢谢!
联系人:张经理
发布IP:119.165.55.*
所在地:山东省青岛市联通
联系电话:
电子邮箱:
您感兴趣的信息
您感兴趣的分类
热门分站联通信息

我要回帖

更多关于 android 图片加载框架 的文章

 

随机推荐