您的位置:首页 > 其它

初学AsyncTask

2016-01-04 12:01 330 查看
AsyncTask必须执行的方法:

1.doInBackground(Params…);//耗时操作

2.onPostExecute(Result) ;//耗时操作执行完成后调用

可选方法:

1.onPreExecute() ;//耗时操作执行之前调用

2.onProgressUpdate(Progress…) ;//调用publishProgress后调用

3.onCancelled() ;//myAsyncTask.cancel(true); 时调用

MainActivity.java

package com.example.tetst0104;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView tv;
ProgressBar pb;
Button bt;

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

init();
}

private void init() {
tv = (TextView) findViewById(R.id.textView01);
pb = (ProgressBar) findViewById(R.id.progressBar02);
bt = (Button) findViewById(R.id.button03);
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
MyAsyncTask myAsyncTask = new MyAsyncTask(tv,pb);
myAsyncTask.execute(1000);
bt.setClickable(false);
}
});
}

}


NetOperator.java

package com.example.tetst0104;

public class NetOperator {

public void operator() {
try {
//休眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}


MyAsyncTask.java

package com.example.tetst0104;

import android.os.AsyncTask;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MyAsyncTask extends AsyncTask<Integer, Integer, String> {
TextView tv ;
ProgressBar pb;

public MyAsyncTask(TextView tv, ProgressBar pb) {
this.tv = tv;
this.pb = pb;
}

/**
* 异步执行前调用
*/
@Override
protected void onPreExecute() {
tv.setText("开始异步");
}

/**
* 处理后台耗时操作
* @param params 为 AsyncTask<参数,参数,参数>的第一个参数
* 返回值String 为 AsyncTask<参数,参数,参数>的第三个参数
*/
@Override
protected String doInBackground(Integer... params) {
//网络连接时 可以传入URL 即
//AsyncTask<String, Integer, String>
//doInBackground(String... params)
NetOperator operator = new NetOperator();
int i = 0;
for (i=10;i<=100;i+=10) {
operator.operator();
publishProgress(i);
}

return i+params[0]+"";
}

/**
* 耗时操作执行完后执行
* @param result 为  doInbackground 的返回值
*/
@Override
protected void onPostExecute(String result) {
tv.setText("异步完成"+result);
}

/**
* 调用publichProgress()时调用
* @param values 为AsyncTask<参数,参数,参数>的第二个参数
*/
@Override
protected void onProgressUpdate(Integer... values) {
pb.setProgress(values[0]);
}

}


转载于:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html#commentform
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: