android AsyncTask异步任务

48 篇文章 0 订阅
1 篇文章 0 订阅


AsyncTask<Params, Progress, Result>

Params:启动任务执行的输入参数类型

Progress:后台任务完成的进度值类型

Result:后台执行任务完成后返回结果的类型

使用AsyncTask只要如下三步即可:

doInBackground(Params。。。)重写该方法就是后台线程将要完成的任务,该方法可以调用publishProgress()方法更新任务的执行进度。

onProgressUpdate(Progress...)在doInBackground()方法中调用publishProgress()方法更新任务的执行进度后,将会触发该方法。

onPreExecute():该方法在执行后台耗时操作前被调用。通常该方法用于完成一些初始化的准备工作

onPostExecute(Result):当doInBackground()完成后,系统会自动调用该方法,并将doInBackground()方法的返回值传递给该方法。


public class MainActivity extends Activity {

 private EditText et;
 private Button bt;
 private TextView tv;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  et = (EditText) findViewById(R.id.editText1);
  bt = (Button) findViewById(R.id.button1);
  tv = (TextView) findViewById(R.id.textView1);
  bt.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View arg0) {
    DownTask task = new DownTask(MainActivity.this);
    try {
     task.execute(new URL("http://www.crazyit.org/ethos.php"));
    } catch (MalformedURLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

   }
  });
 }

 class DownTask extends AsyncTask<URL, Integer, String> {

  ProgressDialog dialog;
  // 定义记录已经读取的数量
  int hasRead = 0;
  Context mContext;

  public DownTask(Context c) {
   mContext = c;
  }

  @Override
  protected void onPostExecute(String result) {
   tv.setText(result);
   dialog.dismiss();
  }

  @Override
  protected void onPreExecute() {
   dialog = new ProgressDialog(mContext);
   dialog.setTitle("多任务正在执行中");
   dialog.setMessage("多任务正在执行请等待。。。。。。。。");
   dialog.setCancelable(false);
   dialog.setMax(202);
   dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
   dialog.setIndeterminate(false);
   dialog.show();
  }

  @Override
  protected void onProgressUpdate(Integer... values) {
   tv.setText("已经读取了" + values[0] + "行");
   dialog.setProgress(values[0]);
  }

  @Override
  protected String doInBackground(URL... arg0) {

   StringBuilder sb = new StringBuilder();
   try {
    URLConnection conn = arg0[0].openConnection();
    BufferedReader br = new BufferedReader(new InputStreamReader(
      conn.getInputStream(), "utf-8"));
    String line = null;
    while ((line = br.readLine()) != null) {
     sb.append(line + "\n");
     hasRead++;
     publishProgress(hasRead);
    }
    return sb.toString();

   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   return null;
  }

 }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值