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()實現上傳進度的更新操作