android AsyncTask异步任务

本文介绍如何使用AsyncTask在Android中实现后台任务执行,包括三步骤:doInBackground、onProgressUpdate和onPostExecute,以及如何在主线程更新任务进度和处理结果。

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;
  }

 }

}

MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值