AsyncTask学习记录
AsyncTask介绍
异步任务 为了解决不能在主线程做耗时操作,不能在子线程更新UI 是android提供的轻量级的异步类,简单,快捷
具体详细代码如下(布局过于简单这就不给出了)
public class MyAsyncTaskText extends Activity
{
private TextView startText, progerssText, endText;
private Button startBtn;
private MyAsync myAsync;
@Override
protected void onCreate (Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startText = (TextView) findViewById(R.id.text1);
progerssText = (TextView) findViewById(R.id.text2);
endText = (TextView) findViewById(R.id.text3);
startBtn = (Button) findViewById(R.id.button1);
myAsync = new MyAsync();
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
myAsync.execute("a" ,"b" );
}
});
}
/**
* 使用步骤
* 1、写一个类继承自AsyncTask
* 有三个范型
* 1、请求参数的类型
* 2、进度的类型
* 3、返回结果的类型
*/
class MyAsync extends AsyncTask<String, Integer, String>
{
/**
* 相当于子线程的操作
* 参数:String... 这叫可变参数(可以传0~n) 相当于一个数组
* 在调用异步任务的时候传递过来的
* 返回值 会将返回的结果返回到onPostExecute的方法中
* 必须重写
*/
@Override
protected String doInBackground (String... params) {
StringBuilder builder = new StringBuilder(Arrays.toString(params));
int i = 0 ;
while (builder.length() < 30 )
{
builder.append(i++);
publishProgress(i);
try {
Thread.sleep(200 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return builder.toString();
}
@Override
protected void onPreExecute () {
super .onPreExecute();
startText.setText("开始执行异步操作" );
}
/**
* 必须调用publishProgress(values)方法才能调用到onProgressUpdate方法
* 当进度更新的时候调用
*/
@Override
protected void onProgressUpdate (Integer... values) {
super .onProgressUpdate(values);
progerssText.setText("当前进度 :" + values[0 ]);
}
/**
* 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)
* 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
*/
@Override
protected void onPostExecute (String result) {
super .onPostExecute(result);
endText.setText("异步操作执行结束\n result=" + result);
}
}
}
最终效果如下
我的感受
现在我感觉这东西真是太好用了,只需覆写几个方法,就可以对线程当前状态进行观察,而且在onPreExecute、onProgressUpdate、onPostExecute中还能对UI控件进行操作 这东西用来做进度条是再好不过的了 结构很明了
想说的话
博客坚持写,不管怎样,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们 若内容有什么地方不对、不清楚,望吐槽,希望大家能一起快乐学习和成长 来一句:有时候我们的想法会被否决,即便后来发现我们是对的,也不可存在怨恨情绪,或者说类似于“我老早就说过会这样,还不信”的话。不要让团队之间由此产生间隙,不要因为这点小事耿耿于怀、常常抱怨。