就是这个样子的,上面那个是文本TextView,下面那俩是button按钮,最后是一个进度条progressBar。
1.首先 打开eclipse,也是在.xml文件中先拖入这几个控件,对两个按钮设置onclick属性,="asyncTask",还是给你们看下代码比较好
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40dp"
android:text="正在下载0个文件" />
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
2.然后呢打开MainActivity.java文件,敲代码。
先写一个刚刚监听的对象asynctask,然后写入跳转方法
3.自定义一个类继承自AsyncTask,然后重写里面的四个方法
4.初始化刚刚自定类的对象,还有准备数组。
好了,接下来看看代码怎么写的吧!
package com.example.cc;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
// 准备数组待会传递异步任务
private String[] s = new String[] { "一号", "二号", "三号", "四号" };
TextView tv = null;// 更新窗体
ProgressBar pb = null;// 进度
Myat myat = new Myat();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
pb = (ProgressBar) findViewById(R.id.pb);
}
public void asynctask(View v) {
switch (v.getId()) {
case R.id.btn1:
myat.execute(s);
break;
case R.id.btn2:
myat.cancel(true);
break;
}
}
// 第一参数,执行时传递进去的类型
// 第二参数,更新那是用的参数
// 第三参数,结束时传递进去的方法类型
// 自定义一个类继承asynctask
class Myat extends AsyncTask
// 在子线程前开始运行
@Override
protected void onPreExecute() {
// 初始化页面
Log.d("zxx", "onpreExecute is over !");
super.onPreExecute();
}
@Override
protected Integer doInBackground(String... params) {
int i = 0;
for (i = 0; i < params.length; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i, params.length);
}
return params.length;
}
@Override
protected void onProgressUpdate(Integer... values) {
tv.setText(values[0] + "");
pb.setProgress((int) ((float) (values[0] + 1) / (float) values[1] * 100));
super.onProgressUpdate(values);
}
// 这个方法执行在异步任务结束之后
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), "你下载了" + result + "个文件",
Toast.LENGTH_SHORT).show();
}
}
}
如果想要再细一点,就是取消任务,弹出个toast提醒一下你,我取消任务了,可以在for循环里加两行代码:
if (isCancelled()) {
Toast.makeText(getApplicationContext(), "子线程停止了!!!!", Toast.LENGTH_SHORT).show();
}
这样他就会提醒你,子线程停止了。
这次提前写的三,二的话改天我再敲敲在给你们说,
是不是感觉很好玩,快去自己动手试试吧!!!