志在指尖
用双手敲打未来

AsyncTask 实例代码演示 Android 异步任务

上次我们讲到了Android提供了一个较线程更简单的处置多任务的办法AsyncTask异步任务类,相关于线程来说AsyncTask关于简单的任务处置更平安,其内部的完成办法运用了Android的Handler机制,关于常见的文件下载能够运用AsyncTask类来处置,在Browser阅读器中就是用了该类下载Web效劳器URL的Favicon图标。首先Android123以简单的下载例子演示该类的大致构造,如下Android
privateclassDownloadFilesTaskextendsAsyncTask<URL,Integer,Long>{
protectedLongdoInBackground(URL…urls){
intcount=urls.length;
longtotalSize=0;
for(inti=0;i<count;i++){
totalSize+=Downloader.downloadFile(urls);
publishProgress((int)((i/(float)count)100));
}
returntotalSize;
}
protectedvoidonProgressUpdate(Integer…progress){
setProgressPercent(progress[0]);
}
protectedvoidonPostExecute(Longresult){
showDialog(“Downloaded”+result+”bytes”);
}
}
//最终我们执行
DownloadFilesTask().execute(url1,url2,url3);//即可。
//在Android阅读器中下载Favicon图标的完成如下:
classDownloadTouchIconextendsAsyncTask<String,Void,Bitmap>{
privatefinalContentResolvermContentResolver;
privatefinalCursormCursor;
privatefinalStringmOriginalUrl;
privatefinalStringmUrl;
privatefinalStringmUserAgent;
/*package*/
BrowserActivitymActivity;
publicDownloadTouchIcon(BrowserActivityactivity,ContentResolvercr,Cursorc,WebViewview){//结构
办法
mActivity=activity;
mContentResolver=cr;
mCursor=c;
mOriginalUrl=view.getOriginalUrl();
mUrl=view.getUrl();
mUserAgent=view.getSettings().getUserAgentString();
}
publicDownloadTouchIcon(ContentResolvercr,Cursorc,Stringurl){//完成本类的结构
mActivity=null;
mContentResolver=cr;
mCursor=c;
mOriginalUrl=null;
mUrl=url;
mUserAgent=null;
}
@Override
publicBitmapdoInBackground(String…values){//返回Bitmap类型
Stringurl=values[0];
AndroidHttpClientclient=AndroidHttpClient.newInstance(mUserAgent);
HttpGetrequest=newHttpGet(url);
HttpClientParams.setRedirecting(client.getParams(),true);//处置302等重定向问题
try{
HttpResponseresponse=client.execute(request);
if(response.getStatusLine().getStatusCode()==200){//假如OK
HttpEntityentity=response.getEntity();
if(entity!=null){
InputStreamcontent=entity.getContent();//将图标保管到InputStream中,由于是二进制内

if(content!=null){
Bitmapicon=BitmapFactory.decodeStream(//从流中取出Bitmap,这里运用了BitmapFactory
类的静态办法decodeStream
content,null,null);
returnicon;
}
}
}
}catch(IllegalArgumentExceptionex){
request.abort();
}catch(IOExceptionex){
request.abort();
}finally{
client.close();
}
returnnull;
}@Override
protectedvoidonCancelled(){
if(mCursor!=null){
mCursor.close();
}
}@Override
publicvoidonPostExecute(Bitmapicon){
if(mActivity!=null){
mActivity.mTouchIconLoader=null;
}if(icon==null||mCursor==null||isCancelled()){
return;
}
//最终图标要保管到阅读器的内部数据库中,系统程序均保管为SQLite格式,Browser也不例外,由于图片是二进制的
所以运用字节数组存储数据库的BLOB类型
finalByteArrayOutputStreamos=newByteArrayOutputStream();
icon.compress(Bitmap.CompressFormat.PNG,100,os);//将Bitmap紧缩成PNG编码,质量为100%存储
ContentValuesvalues=newContentValues();//结构SQLite的Content对象,这里也能够运用rawsql替代
values.put(Browser.BookmarkColumns.TOUCH_ICON,os.toByteArray());//写入数据库的
//Browser.BookmarkColumns.TOUCH_ICON字段
if(mCursor.moveToFirst()){
do{
mContentResolver.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI,
mCursor.getInt(0)),values,null,null);
}while(mCursor.moveToNext());
}
mCursor.close();
}
}
本次经过两个AsyncTask类演示了多品种型的任务结构,这里大家留意返回类型,本节演示了Android
平台上ContentProvider、AsyncTask、Bitmap、HTTP以及Stream的相关操作,大家如何想很快进步开发程度其实只需理解Google如何去完成Android系统常规构架就能够轻松入门谷歌挪动平台。

未经允许不得转载:IT技术网站 » AsyncTask 实例代码演示 Android 异步任务
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载