asynctask上传
Ⅰ Android图片批量上传的功能。(图片比较大)
Android中上传图片或者下载图片,使用最多的是xUtils和imageloader、glide,选用这两种的哪一种框架都行,因为是批量和图片大容易造成界面卡以及上传速度慢,对图片操作不当就容易造成OOM异常,一般对于批量上传大图片都需要对图片也处理,然后在上传第一步需要对图片进行比例压缩之后再进行质量压缩,处理之后的图片比之前的图片会小很多,再加上框架的上传处理,会有很好的效果,希望对你有所帮助
Ⅱ 我想学用java建网站,应该怎么学
Java是一门涵盖比较广的编程语言,自学起来相对比较困难,网上有视频资料,可以下载来看,下面我把Java入门需要学的一些东西做一个整理,仅供参考,有问题的话可以继续问我。
第一阶段:JavaEE初级
JDK的下载安装配置、Eclipse开发工具介绍、Java基本程序的编译运行、关键字、标示符、注释、常量、变量、数据类型、进制转换、数据类型转换、各种运算符的使用、各种判断循环语句的使用、函数的使用、数组的使用
面向对象入门、用Java来描述对象、局部变量和成员变量、Java对象内存分析、匿名对象、封装、构造函数、Main函数详解、继承、重写、抽象类、接口、多态、内部类、异常、包机制、JAR包
StringBuffer类、Date和Calendar类,System类、Runtime类、Math类,正则表达式、基本数据类型包装类
集合类(Collection)、List、ArryList、LinkList、Vector、迭代器、Set、HashSet、TreeSet、LinkedHashSet、Map、HashTable、HashMap、TreeMap、泛型等各种数据集合的分析和使用
异常处理、多线程基础、IO系统、网络编程、Java反射机制、Java注解、JavaSE 8.0新特性SVN介绍、SVN服务端的安装及使用、SVN客户端的安装及使用、SVN团队开发注意事项
第二阶段:JavaEE进阶
认识Web前端、常见标签及用途、选择器及分类、浮动、定位、表格和表单、HTML进阶、HTML5基础、HTML5新技术特点WebSocket、地理定位、canvas
CSS的作用、CSS的各种选择器、行内样式、内部样式、外部样式、选择器及样式的优先级问题、盒子模型、层的浮动、游览器调试工具的使用、采用DIV+CSS设计页面
BOM浏览器对象模型、DOM文档对象模型、JS操作CSS、JS操作DOM、JS操作DIV、protoype、js基于对象编程
jQuery基本技术、jQuery使用插件、jQuery EasyUI、jQuery mobile
Bootstrap基础知识、Bootstrap预定义的CSS样式、Bootstrap内置的布局组件、Bootstrap支持的JavaScript插件、Less、Sass、Chart.JS、Two.JS、实际使用Bootstrap
Mysql5.5/5.6数据库、navicat客户端软件,基本建表、插入数据、修改数据、查询数据操作、数据备份与移植
JDBC连接MySQL数据库,CRUD操作
XML的概念与基本作用、XML的基本语法、XML的约束模式、DTD、Schema、名称空间。XML解析介绍、DOM4J解析XML、XPath的使用
HTTP协议详解,Web服务器的工作原理、Tomcat的安装与启动运行、Tomcat的体系结构、在Tomcat中配置Web虚拟目录与发布Web应用程序的方式、设置目录的默认网页、使用Tomcat配置虚拟主机、WAR文件生成与使用
安装使用MyEclipse进行JavaEE程序开发和调试,以及和Tomcat的集成
什么是Servlet、Servlet接收客户端请求信息、Servlet响应客户端信息、Servlet的生命周期、Servlet过滤器和AOP编程;Servlet监听器
什么是JSP、JSP的内置对象、透析JSP的本质、JSTL+EL、JSP内置对象与状态管理
Tomcat和JDBC连接池配置、JDBC的事务、JSP整合进行分页,条件查询
MVC核心思想、MVC基本入门JSP+Servlet+Bean整合
AJAX技术基础、XMLHttpRequest对象详解、jQuery的AJAX、AJAX技术调试技巧、JSON介绍、JSON语法、JSON类库
LoggingAPI日志管理、JUnit单元测试技术、Ant打包
第三阶段:JavaEE高级
SpringWeb MVC介绍、Web MVC应用、Spring WebMVC架构、Spring MVC入门程序、非注解处理器映射器和适配器、注解开发处理器映射器和适配器、Spring MVC整合Mybatis、RequestMapping、Controller方法返回值、参数绑定(简单类型、pojo、包装类型、数组、集合类型等)、SpringMVC与Struts2区别、Spring MVC上传图片、json数据交互、Validation、异常处理器、RESTful支持、拦截器
Mybatis介绍、单独使用jdbc编程问题总结、Mybatis架构、Mybatis入门程序、Mybatis开发Dao、SqlMapConfig.XML配置、ParameterType输入映射、ResultType及ResultMap输出映射、动态SQL、商品订单数据模型、关联查询(一对一、一对多)、Mybatis与Spring整合、Mybatis逆向工程
Spring框架介绍,IoC思想、DI依赖注入、Bean的实例方式、Bean种类、Bean作用域范围、依赖注入、p命名空间、SpEL?Spring表达式、注解装配Bean、整合Junit测试、Web开发集成Spring、AOP思想、使用AspectJ切面编程、JdbcTemplate模板使用、C3P0数据源配置、DBCP数据源配置、声明式事务管理、SSH整合
Struts2框架介绍、工作原理与架构分析、6大配置文件分析、Struts.XML详解及使用,使用通配符定义action、动态方法调用,ActionContext及ServletActionContext使用,模型驱动ModelDriven、属性驱动、Struts2文件上传、默认拦截器分析、自定义拦截器、OGNL表达式、值栈ValueStack分析及操作、Struts2标签
学会基于Spring?Boot实现减少XML配置,快速搭建Java Web项目,减少Java开发的笨重的工作量,减少项目周期
Maven的介绍、Maven的构建、Maven的依赖管理、Maven和Eclipse的整合、Maven构建SSM应用
Oracle基础管理,SQL语言、序列、索引、视图对象、数据备份与移植
第四阶段:JavaEE熟练
基于JFreeChart生成饼图、曲线图、柱状图
基于iText生成pdf文件
基于POI组件生成EXCEL文件
Quartz定时任务管理器以及和Spring的继承
HttpClient/HTMLParser,采用HttpClient如何抓取网页、GET提交和POST提交、采用HTMLParser解析HTML。
NIO介绍、netty入门
Activiti工作流:掌握工作流的基本概念,什么叫流程定义、什么叫流程实例、什么叫任务、工作流中的相关概念将如何应用
异构系统整合方案,JNI、CORBA、基于Web?Services的中国电信消息系统规范介绍、SOAP、WSDL、UDDI、如何采用CXF/Axis2开发WebService服务器端和客户端的相关知识
git介绍、git版本管理。
掌握Linux的常用命令,熟悉Linux上下文编辑器,掌握Linux的文件管理控制等
JbossWeblogic企业级JavaEE应用服务器安装、配置
基本的Apache和Tomcat整合,最新的Tomcat和Apache集群和负载均衡配置
掌握Nginx负载均衡及和Tomcat的整合
掌握ActiveMQ消息队列的安装以及和Java的集成、JMS接口规范
MySQL主从配置、MySQL分库分表实际演练、MySQL集群配置
MongoDB安装,基本使用,和Java集成、Spring框架集成
Redis安装,基本使用,和Java集成、Spring框架集成
安卓基础开发:了解Android和开发环境搭建、Activity、UI布局和UI组件、AsyncTask异步任务、网络应用、资讯APP实战基于JFreeChart生成饼图、曲线图、柱状图
Ⅲ 针对Android的性能优化集中哪些方面
一、概要:
本文主要以Android的渲染机制、UI优化、多线程的处理、缓存处理、电量优化以及代码规范等几方面来简述Android的性能优化
二、渲染机制的优化:
大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。
*关于JobScheler的更多知识可以参考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html
七、代码规范
1)for loop中不要声明临时变量,不到万不得已不要在里面写try catch。
2)明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)
3)合理使用数据类型,StringBuilder代替String,少用枚举enum,少用父类声明(List,Map)
4)如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。
5)你要知道单例的好处,并正确的使用它。
6)多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。
7)如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。
8)View中设置缓存属性.setDrawingCache为true.
9)cursor的使用。不过要注意管理好cursor,不要每次打开关闭cursor.因为打开关闭Cursor非常耗时。Cursor.require用于刷cursor.
10)采用SurfaceView在子线程刷新UI,避免手势的处理和绘制在同一UI线程(普通View都这样做)
11)采用JNI,将耗时间的处理放到c/c++层来处理
12)有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右
13)懒加载和缓存机制。访问网络的耗时操作启动一个新线程来做,而不要再UI线程来做
14)如果方法用不到成员变量,可以把方法申明为static,性能会提高到15%到20%
15)避免使用getter/setter存取field,可以把field申明为public,直接访问
16)私有内部类要访问外部类的field或方法时,其成员变量不要用private,因为在编译时会生成setter/getter,影响性能。可以把外部类的field或方法声明为包访问权限
17)合理利用浮点数,浮点数比整型慢两倍
18)针对ListView的性能优化,ListView的背景色与cacheColorHint设置相同颜色,可以提高滑动时的渲染性能。ListView中getView是性能是关键,这里要尽可能的优化。
getView方法中要重用view;getView方法中不能做复杂的逻辑计算,特别是数据库操作,否则会严重影响滑动时的性能
19)不用new关键词创建类的实例,用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。
clone()方法不会调用任何类构造函数。在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:
20)public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用。
21)乘法和除法
考虑下面的代码:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }
22)ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。
23)每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费
24)提高下载速度:要控制好同时下载的最大任务数,同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)
25)提供加载速度:让服务端提供不同分辨率的图片才是最好的解决方案。还有合理使用内存缓存,使用开源的框架
引用:Android性能优化的浅谈
Ⅳ 有哪些 Android 的开源界面库
比较火爆的Android开源库有以下:
1、volley
主要有以下模块:
(1) JSON,图像等的异步下载;
(2) 网络请求的排序(scheling)
(3) 网络请求的优先级处理
(4) 缓存
(5) 多级别取消请求
(6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)2、android-async-http
主要有以下模块:
(1) 在匿名回调中处理请求结果
(2) 在UI线程外进行
(3) 文件断点上传
(4) 智能重试
(5) 默认gzip压缩
(6) 支持解析成Json格式
(7) 可将Cookies持久化到SharedPreferences 3、Afinal框架
主要有四大模块:
(1) 数据库模块:android中的
,使用了线程池对sqlite进行操作。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。4、xUtils框架
主要有四大模块:
(1) 数据库模块:android中的
,一行代码就可以进行增删改查;
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
(3) 网络模块:支持同步,异步方式的请求;
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;5、ThinkAndroid主要有以下模块:(1) MVC模块:实现视图与模型的分离。
(2) ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
(3) 数据库模块:android中的
,使用了线程池对sqlite进行操作。
(4) http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
(5) 缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
(6) 图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
(7) 配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
(8) 日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
(9) 下载器模块:可以简单的实现
、后台下载、
、对下载进行控制、如开始、暂停、删除等等。
(10) 网络状态检测模块:当网络状态改变时,对其进行检6、LoonAndroid 主要有以下模块:
(1) 自动注入框架(只需要继承框架内的application既可)
(2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
(3) 网络请求模块(继承了基本上现在所有的
)
(4) eventbus(集成一个开源的框架)
(5) 验证框架(集成开源框架)
(6) json解析(支持解析成集合或者对象)
(7) 数据库(不知道是哪位写的 忘记了)
(8) 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9) 自动更新模块
(10) 一系列工具类
Ⅳ 怎样实现在android实现带进度条的上传效果
实现在android实现带进度条的上传效果效果如图:用到以下两个类就可实现带进度条的文件上传:
1、CustomMultiPartEntity extends MultipartEntity,
2、HttpMultipartPost extends AsyncTask
代码如下:
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
public class CustomMultipartEntity extends MultipartEntity {
private final ProgressListener listener;
public CustomMultipartEntity(final ProgressListener listener) {
super();
this.listener = listener;
}
public CustomMultipartEntity(final HttpMultipartMode mode, final ProgressListener listener) {
super(mode);
this.listener = listener;
}
public CustomMultipartEntity(HttpMultipartMode mode, final String boundary,
final Charset charset, final ProgressListener listener) {
super(mode, boundary, charset);
this.listener = listener;
}
@Override
public void writeTo(final OutputStream outstream) throws IOException {
super.writeTo(new CountingOutputStream(outstream, this.listener));
}
public static interface ProgressListener {
void transferred(long num);
}
public static class CountingOutputStream extends FilterOutputStream {
private final ProgressListener listener;
private long transferred;
public CountingOutputStream(final OutputStream out, final ProgressListener listener) {
super(out);
this.listener = listener;
this.transferred = 0;
}
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
this.transferred += len;
this.listener.transferred(this.transferred);
}
public void write(int b) throws IOException {
out.write(b);
this.transferred++;
this.listener.transferred(this.transferred);
}
}
}
该类计算写入的字节数,我们需要在实现ProgressListener中的trasnfered()方法,更行进度条
public class HttpMultipartPost extends AsyncTask<HttpResponse, Integer, TypeUploadImage> {
ProgressDialogpd;
longtotalSize;
@Override
protectedvoidonPreExecute(){
pd= newProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("Uploading Picture...");
pd.setCancelable(false);
pd.show();
}
@Override
(HttpResponse... arg0) {
HttpClienthttpClient = newDefaultHttpClient();
HttpContexthttpContext = newBasicHttpContext();
HttpPosthttpPost = newHttpPost("http://herpderp.com/UploadImage.php");
try{
= newCustomMultipartEntity(
newProgressListener() {
@Override
public void transferred(longnum){
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
// We use FileBody to transfer an image
multipartContent.addPart("uploaded_file", newFileBody(
newFile(m_userSelectedImagePath)));
totalSize= multipartContent.getContentLength();
// Send it
httpPost.setEntity(multipartContent);
HttpResponseresponse = httpClient.execute(httpPost, httpContext);
String serverResponse = EntityUtils.toString(response.getEntity());
ResponseFactoryrp = newResponseFactory(serverResponse);
return(TypeImage) rp.getData();
}
catch(Exception e) {
System.out.println(e);
}
returnnull;
}
@Override
protectedvoidonProgressUpdate(Integer... progress){
pd.setProgress((int) (progress[0]));
}
@Override
protectedvoidonPostExecute(TypeUploadImageui) {
pd.dismiss();
}
}
在 transferred()函数中调用publishProgress((int) ((num / (float) totalSize) * 100));
在onProgressUpdate()实现上传进度的更新操作