第五章,AsyncTask和ProgressBar的练习(Android)

<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/main_start"android:text="开始"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/main_stop"android:text="停止"/><ProgressBarandroid:id="@+id/main_progress"android:layout_width="match_parent"android:layout_height="wrap_content"style="@android:style/Widget.ProgressBar.Horizontal"/></LinearLayout>

package com.example.demo07;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {Button button_start, button_stop;ProgressBar pd;MyTask as;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化数据init();}private void init() {button_start = (Button) this.findViewById(R.id.main_start);button_stop = (Button) this.findViewById(R.id.main_stop);pd = (ProgressBar) this.findViewById(R.id.main_progress);button_start.setOnClickListener(this);button_stop.setOnClickListener(this);}// 点击方法@Overridepublic void onClick(View arg0) {// 点击了开始if (button_start.getId() == arg0.getId()) {as = new MyTask();// execute()中的参数可以不填,也可以传一个或多个,// 参数类型与doInBackground方法参数必须一致,因为接受参数就是这个方法as.execute();// 点击了关闭} else if (button_stop.getId() == arg0.getId()) {as.cancel(true);}}// 写一个类继承AsyncTaskclass MyTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();Log.i("qing", "onPreExecute");}@Overrideprotected String doInBackground(String… arg0) {/****************************************** 这里如果有循环,一定要写在try里面,同时一定要写休眠sleep,* 不然AsyncTask的cancel()方法执行时此AsyncTask无法停止,* 因为这整个AsyncTask停止时因为它在休眠时Thread.sleep(),* 点击了执行cancel()会报异常,于是退出。不然就会一直循环,* 虽然会执行cancel()方法,但这个AsyncTask不会停止。*****************************************/try {for (int i = 0; i <= 100; i++) {Thread.sleep(100);publishProgress(i);}} catch (InterruptedException e) {e.printStackTrace();}return null;}@Overrideprotected void onProgressUpdate(Integer… values) {// TODO Auto-generated method stubpd.setProgress(values[0]);Log.i("q", "onProgressUpdate");}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubToast.makeText(getApplication(), "进度结束", Toast.LENGTH_SHORT).show();Log.i("q", "onPostExecute");}@Overrideprotected void onCancelled() {// TODO Auto-generated method stubsuper.onCancelled();Log.i("q", "onCancelled");}}}调试截图:

我诚恳地希望能够获得你的原谅。只是你懂得的,对于有一些委屈,

第五章,AsyncTask和ProgressBar的练习(Android)

相关文章:

你感兴趣的文章:

标签云: