Android开发中AsyncTask实现异步处理任务的方法(2)
发布时间:2021-06-07
发布时间:2021-06-07
Android开发中AsyncTask实现异步处理任务
方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
Android开发中AsyncTask实现异步处理任务
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(yout.main); message= (TextView) findViewById(R.id.message); url= (EditText) findViewById(R.id.url); open= (Button) findViewById(R.id.open); open.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ connect();}});} private void connect(){ PageTask task= new PageTask(this); task.execute(url.getText().toString());} class PageTask extends AsyncTask<String, Integer, String>{//可变长的输入参数,与 AsyncTask.exucute()对应 ProgressDialog pdialog; public PageTask(Context context){ pdialog= new ProgressDialog(context, 0); pdialog.setButton("cancel", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int i){ dialog.cancel();}}); pdialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ public void onCancel(DialogInterface dialog){ finish();}}); pdialog.setCancelable(true); pdialog.setMax(100); pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pdialog.show();
Android开发中AsyncTask实现异步处理任务
}@Override protected String doInBackground(String... params){ try{ HttpClient client= new DefaultHttpClient();// params[0]代表连接的 url HttpGet get= new HttpGet(params[0]); HttpResponse response= client.execute(get); HttpEntity entity= response.getEntity(); long length= entity.getContentLength(); InputStream is= entity.getContent(); String s= null; if(is != null){ ByteArrayOutputStream baos= new ByteArrayOutputStream(); byte[] buf= new byte[128]; int ch= -1; int count= 0; while((ch= is.read(buf)) != -1){ baos.write(buf, 0, ch); count+= ch; if(length> 0){//如果知道响应的长度,调用 publishProgress
()更新进度 publishProgress((int) ((count/ (float) length) * 100));}//让线程休眠 100ms Thread.sleep(100);} s= new String(baos.toByteArray());}//返回结果 return s;} catch(Exception e){ e.printStackTrace();} return null;}@Override protected void onCancelled(){
Android开发中AsyncTask实现异步处理任务
super.onCancelled();}@Override protected void onPostExecute(String result){//返回 HTML页面的内容 message.setText(result); pdialog.dismiss();}@Override protected void onPreExecute(){//任务启动,可以在这里显示一个对话框,这里简单处理 message.setText(R.string.task_started);}@Override protected void onProgressUpdate(Integer... values){//更新进度 System.out.println(""+values[0]); message.setText(""+values[0]); pdialog.setProgress(values[0]);}}}
上一篇:泵送混凝土可泵性浅析
下一篇:双语阅读活动实施方案