您的位置:首页 > 移动开发 > Android开发

Android:异步任务AsyncTask、execute、publishProgress、onProgressUpdate

2016-09-07 18:20 465 查看
public class MainActivity extends Activity implements OnClickListener
{

private TextView textView;
private ProgressBar progressBar;

class MyAsyncTask extends AsyncTask<String, Integer, String>
{
/**
* 异步任务:AsyncTask<Params, Progress, Result>
* 1.Params:UI线程传过来的参数。
* 2.Progress:发布进度的类型。
* 3.Result:返回结果的类型。耗时操作doInBackground的返回结果传给执行之后的参数类型。
*
* 执行流程:
* 1.onPreExecute()
* 2.doInBackground()-->onProgressUpdate()
* 3.onPostExecute()
*/
@Override
protected void onProgressUpdate(Integer... values)//执行操作中,发布进度后
{
progressBar.setProgress(values[0]);//每次更新进度条
}
@Override
protected void onPreExecute()//执行耗时操作之前处理UI线程事件
{
progressBar.setVisibility(View.VISIBLE);//点击之后,下载执行之前,设置进度条可见
}

@Override
protected String doInString...  params)//执行耗时操作
{
//在此方法执行耗时操作,耗时操作中发布进度,更新进度条
//String result = download();
for (int i = 0; i < 10; i++)
{
try
{
Thread.sleep(1000);
publishProgress(i * 10);//进度条每次更新10%,执行中创建新线程处理onProgressUpdate()
}
catch (InterruptedException e)
{
e.printStackTrace();
}

}
return "下载完成!";
}

@Override
protected void onPostExecute(String result)//执行耗时操作之后处理UI线程事件
{
//在此方法执行main线程操作
progressBar.setVisibility(View.GONE);//下载完成后,隐藏进度条
textView.setText(result);
}

}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(this);
textView = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
btnClick();
break;

default:
break;
}
}
private void btnClick()//创建AsyncTask对象,执行任务
{
MyAsyncTask asyncTask = new MyAsyncTask();
asyncTask.execute("http://www.google.com");//可以通过此处传参数给AsyncTask,execute方法只能在UI线程里使用
}
private String download()//下载,耗时操作
{
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return "下载完成!";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android asynctask 异步