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

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

2015-09-25 23:25 501 查看
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();
}

}

}

根据自身的需求三个泛型  不同使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: