Android--异步任务AsyncTask
实例:使用异步任务从网络上下载
packagecom.example.xiaocool.anysctaskdemo;importandroid.app.ProgressDialog;importandroid.content.Context;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.support.v7.app.ActionBarActivity;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URI;importjava.net.URLConnection;publicclassMainActivityextendsActionBarActivity{privateTextViewshow;privateButtondownload;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show=(TextView)this.findViewById(R.id.show_down);download=(Button)this.findViewById(R.id.button);download.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){DownTasktask=newDownTask(MainActivity.this);try{/***开始执行耗时的任务*/task.execute(newURI("http://news.baidu.com/"));}catch(ExceptionE){E.printStackTrace();}}});}/***Params启动任务执行的输入参数的类型*Progress后台任务完成的进度值得类型,*Result后台执行任务完成后返回结果的类型*如果不需要指定类型Void*<p/>*重写的方法都有系统调用*/classDownTaskextendsAsyncTask<URI,Integer,String>{ProgressDialogprogressDialog;//定义记录已读取行的数量inthasRead=0;ContextmContext;publicDownTask(Contextcontext){mContext=context;}/***后台线程将要完成的任务,该方法可以调用publishProgress(Progressvalue)更新任务的执行进度**@paramparams*@return*/@OverrideprotectedStringdoInBackground(URI...params){StringBuildersb=newStringBuilder();try{URLConnectionconn=params[0].toURL().openConnection();//打开conn连接对应的输入流,包装成BufferReader对象BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream(),"utf-8"));Stringline=null;while((line=br.readLine())!=null){sb.append(line+"\n");hasRead++;//更新任务的执行进度publishProgress(hasRead);}returnsb.toString();}catch(Exceptione){e.printStackTrace();}returnnull;}/***在doInBackground方法中调用publishProgress(Progressvalue),更新任务的进度后,就会触发该方法**@paramvalues*/@OverrideprotectedvoidonProgressUpdate(Integer...values){show.setText("读取了"+values[0]);progressDialog.setProgress(values[0]);}/***该方法将在执行后台耗时程序时被调用,该方法用于完成一些初始化的准备工作,比如在界面上显示进度条*/@OverrideprotectedvoidonPreExecute(){progressDialog=newProgressDialog(mContext);progressDialog.setTitle("任务正在执行中!");progressDialog.setMessage("任务正在执行中,稍后!!");//取消按钮不可用progressDialog.setCancelable(false);progressDialog.setMax(202);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setIndeterminate(false);progressDialog.show();}/***当doInBackground方法完成后,系统会自动调用该方法并将doInBackground()的返回值传给该方法**@params*/@OverrideprotectedvoidonPostExecute(Strings){//返回HTML页面的内容show.setText(s);progressDialog.dismiss();}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。