Android AsyncTask(异步) 简单样例

Android AsyncTask(异步) 操作使用

 

 

 

 

1、Main类

public class Main extends Activity {

private Button buttonNet;

private Button buttonPrint;

private TextView textView;

private ProgressBar progressBar;

ProgressAsync progressAsync;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        buttonNet = (Button)findViewById(R.id.buttonNet);

        buttonPrint = (Button)findViewById(R.id.buttonPrint);

        textView = (TextView)findViewById(R.id.textView);

        progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);

        buttonNet.setOnClickListener(btnNet);

        buttonPrint.setOnClickListener(btnPrint);

    }

 

 

/**

* 用户离开屏幕,取消异步任务

*/

@Override

protected void onPause() {

 

if (progressAsync != null && progressAsync.getStatus() != AsyncTask.Status.FINISHED) {

        progressAsync.cancel(true);

 }

}

    private OnClickListener btnNet = new OnClickListener() {

 

@Override

public void onClick(View v) {

/*NetOpertor opertor = new NetOpertor();

opertor.operate();*/

progressAsync = new ProgressAsync(textView,progressBar);

progressAsync.execute(1000);

}

};

private OnClickListener btnPrint = new OnClickListener() {

int i = 1;

@Override

public void onClick(View v) {

textView.setText("输出信息===="+i++);

}

};

}

2、NetOpertor类

/**

 * 线程控制

 * @author XP

 *

 */

public class NetOpertor {

 

public void operate(){

 

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

 

e.printStackTrace();

}

 

}

}

3、ProgressAsync执行异步操作

 

/**

 

 * 执行异步操作

 

 * @author XP

 

 *

 

 */

 

public class ProgressAsync extends AsyncTask<Integer, Integer, String> {

private TextView view;

private ProgressBar progressBar;

public ProgressAsync(TextView view,ProgressBar progressBar) {

this.view = view;

this.progressBar = progressBar;

}

//第二步 在后台运行,所有的实际工作都是在其中完成的

@Override

protected String doInBackground(Integer... params) {

NetOpertor opertor = new NetOpertor();

for (int i = 10; i <= 100; i+=10) {

opertor.operate();

//调用第三步

publishProgress(i);

}

return "执行完毕";

}

//第1步 在后台处理开始前,这个方法在UI线程中运行,可显示进度指示器

@Override

protected void onPreExecute() {

view.setText("开始执行异步操作......");

}

//第四步 后台处理结束时,这个方法在UI线程中运行

@Override

protected void onPostExecute(String result) {

view.setText(result);

}

 

//第三步 每当doInBackground调用publishProgress时,都会在UI线程中运行这个方法,它接收后台处理提供的信息,可使用它更新用户看到的ProgressBar控件

@Override

protected void onProgressUpdate(Integer... values) {

progressBar.setProgress(values[0]);

}

}

猜你喜欢

转载自technicalsearch.iteye.com/blog/1836901
今日推荐