首页 > 代码库 > AsyncTask
AsyncTask
Asynctask是android对java线程的一个封装,通常用于后台线程和UI线程的交互。直接看下面实例:
主UI Activity中执行:
mprogressbar = (ProgressBar)findViewById(R.id.progressBar1); mtextview = (TextView)findViewById(R.id.textView1); mbutton = (Button)findViewById(R.id.button1); mprogressbar.setMax(10); mbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //AsyncTask只能在UI主线程中调用,且不能多次调用 MyTask task = new MyTask(mtextview, mprogressbar); task.execute("fredric"); } });
自定义AsyncTask如下:
//AsyncTask是一个抽象类,其中定义三种泛型类型//AsyncTask<Params, Progress, Result>,其中:
//Params对应调用时传入的参数(即执行doInBackGroud时的参数,由execute传入),下例为String;
//Progress为中间进度条调用的参数(即执行onProgressUpdate时的参数,下例为Integer)
//Result为执行结束后的调用的参数(即执行onPostExecute时的参数)
public class MyTask extends AsyncTask<String, Integer, String> { private TextView mtextview; private ProgressBar mprogressbar; public MyTask(TextView mtextview, ProgressBar mprogressbar) { super(); this.mtextview = mtextview; this.mprogressbar = mprogressbar; }
//AyncTask的耗时操作定义在此函数中
//其中publishProgress可以出发执行onProgressUpdats
//该方法在onPreExecute后执行
//该方法不运行在UI线程中,因此不能对UI进行操作,下面三个方法都可以,实例中操作了文本和进度条
//UI线程在执行doInBackground后无法再向该线程发送消息; @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub int i = 0; for(i = 0; i < 10; i++){ try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return i + "&" + params[0]; } @Override protected void onPreExecute() { mtextview.setText("开始执行线程"); } @Override protected void onProgressUpdate(Integer... values) { mprogressbar.setProgress(values[0]); } @Override protected void onPostExecute(String result) { mtextview.setText(result); }}
AsyncTask
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。