上次我们讲到了Android提供了一个较线程更简单的处置多任务的办法AsyncTask异步任务类,相关于线程来说AsyncTask关于简单的任务处置更平安,其内部的完成办法运用了Android的Handler机制,关于常见的文件下载能够运用AsyncTask类来处置,在Browser阅读器中就是用了该类下载Web效劳器URL的Favicon图标。首先Android123以简单的下载例子演示该类的大致构造,如下
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系统常规构架就能够轻松入门谷歌挪动平台。
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com