手机版

Android开发中AsyncTask实现异步处理任务的方法(2)

发布时间: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]);}}}

Android开发中AsyncTask实现异步处理任务的方法(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)