异步加载AsyncTask小谈+实例

AsyncTask是Android解决异步加载的一种方案,它比Handler和Message的方式更加轻量级。

目前创新互联公司已为上千的企业提供了网站建设、域名、虚拟空间、网站托管维护、企业网站设计、黟县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

一般的使用步骤:

  1. 自定义一个继承AsyncTask的类。自定义时可以传入AsyncTask的3个泛型参数,即Params,Progress和Result。Params是需要传入的参数,Progress是进程执行的百分比,Result是最终返回的结果。

  2. 实现从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="--" />

   

        android:id="@+id/button"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/text"

        android:layout_marginTop="24dp"

        android:text="开始载入" />

点击按钮,即可实现异步加载。


分享文章:异步加载AsyncTask小谈+实例
文章来源:http://azwzsj.com/article/jggcho.html