【Android杂谈】AsyncTask的详细使用解析

来源:互联网 发布:软件代理加盟协议 编辑:程序博客网 时间:2024/06/06 11:40

AsyncTask是可以用来做更新UI的,耗时操作可以交给他,这样避免主线程的耗时。

使用须知:

主要在于execute()方法,AsyncTask<Void,Inetger,Void>,   由此可知,有三个泛型

第一个是调用execute()方法时传入的参数类型和doInBackgound()的参数类型

第二个是更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型

第三个是doInBackground()的返回值类型

这样可以完美解决耗时,避免造成不好的用户体验,同时也可以保证在运行中,主线程依然可以找到后天耗时操作的进度。

这一特点让人联想到了进度条,没错,进度条就可以用它来完成。

package yyc.com.mysurface;import android.app.Activity;import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.Button;/** * Created by Administrator on 2015/9/25. */public class test extends Activity{    Button btn;    ProgressDialog pd;    MyTask ss=null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.test);        btn=(Button)findViewById(R.id.te);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ss=new MyTask();                ss.execute();            }        });    }    class  MyTask extends AsyncTask<Void,Void,Void>{        @Override        protected void onPreExecute() {            super.onPreExecute();         pd=ProgressDialog.show(test.this,"正在加载","请稍后",true);        }        @Override        protected Void doInBackground(Void... params) {            new Thread() {                public void run() {                    try{                        sleep(5000);//为了效果,在此让它3秒,各位可以将这里线程代码去掉,换成自己所要的网络耗时操作                    }catch(InterruptedException e){                        e.printStackTrace();                    }                }}.start();            return null;        }        @Override        protected void onPostExecute(Void aVoid) {            super.onPostExecute(aVoid);            pd.dismiss();        }    }}
根据自身的需求三个泛型  不同使用



1 0
原创粉丝点击