重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
AsyncTask是Android解决异步加载的一种方案,它比Handler和Message的方式更加轻量级。
目前创新互联公司已为上千的企业提供了网站建设、域名、虚拟空间、网站托管维护、企业网站设计、黟县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
一般的使用步骤:
自定义一个继承AsyncTask的类。自定义时可以传入AsyncTask的3个泛型参数,即Params,Progress和Result。Params是需要传入的参数,Progress是进程执行的百分比,Result是最终返回的结果。
实现从AsyncTask继承下来的方法。
主要有onPreExecute()、doInBackground(Params...)、onProgressUpdate(Progress...)和onPostExecute(Result)四种方法。
其中,
onPreExecute():执行实际后台操作之前被调用。
doInBackground(Params...):紧跟onPreExecute()之后进行的实际后台操作,一般进行比较耗时 的操作,更新实时任务进度,可以调用publishProgress()。
onProgressUpdate(Progress...):运行与UI线程,可更新实时进度。
onPostExecute(Result):运行于UI线程,其参数就是doInBackground()的返回值。
3.在主线程中创建AsyncTask对象,并调用execute()方法。
具体示例来展示AsyncTask异步加载:
MainActivity代码:
public class MainActivity extends Activity {
private TextView textview;
private Button button;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(TextView)findViewById(R.id.text);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
LoadTask task=new LoadTask();
task.execute();
}
});
}
private class LoadTask extends AsyncTask
private ProgressDialog progressdialog;
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
int sum=1;
while(sum<=10){
try {
Thread.sleep(1000);
publishProgress(sum);
sum++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "加载完成。";
}
//紧跟onPreExecute()之后紧跟的操作,进行耗时操作,利用publishprogress()更新。
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressdialog=progressdialog.show(MainActivity.this, "AsyncTask Demo", "载入中...",true);
}
//在doinbackground之前调用,创建一个对话框。
protected void onProgressUpdate(Integer...values){
textview.setText(values[0]*10+"%");
}
//运行于ui线程,更新实时进度。
protected void onPostExecute(String result){
progressdialog.dismiss();
textview.setText(result);
}
//运行于ui线程,返回值就是doInBackground()的返回值。
}
}
xml代码:
android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="--" />