版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/qq_34291777 https://blog.csdn.net/qq_34291777/article/details/72621911
Android学习—使用异步内部类
为什么要用AsyncTask?
答:我们可以用上述两种方法来完成我们的异步操作,加入要我们写的异步操作比较多,或者较为繁琐,
难道我们new Thread()然后用上述方法通知UI更新么?程序员都是比较喜欢偷懒的,既然官方给我
们提供了AsyncTask这个封装好的轻量级异步类,为什么不用呢?我们通过几十行的代码就可以完成
我们的异步操作,而且进度可控;相比起Handler,AsyncTask显得更加简单,快捷~当然,这只适合
简单的异步操作,另外,实际异步用的最多的地方就是网络操作,图片加载,数据传输等,AsyncTask
暂时可以满足初学者的需求,谢谢小应用,但是到了公司真正做项目以后,我们更多的使用第三发的
框架,比如Volley,OkHttp,android-async-http,XUtils等很多,后面进阶教程我们会选1-2个框架进行
学习,当然你可以自己找资料学习学习,但是掌握AsyncTask还是很有必要的!
2)AsyncTask的基本结构:
AsyncTask是一个抽象类,一般我们都会定义一个类继承AsyncTask然后重写相关方法~
官方API:AsyncTask
• 构建AsyncTask子类的参数:
• 相关方法与执行流程:
• 注意事项:`
后台代码
package com.example.administrator.myapplication;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tv;
Button btn;
ProgressBar pg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pg = (ProgressBar) findViewById(R.id.progressBar);
btn=(Button)findViewById(R.id.btn);
tv=(TextView)findViewById(R.id.tv);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyTask mt=new MyTask();
mt.execute(1000);
}
});
}
//onPreExecute()-> doInBackground ->
class MyTask extends AsyncTask<Integer,Integer,String>{
int i;
@Override
protected void onPreExecute() {
super.onPreExecute();
tv.setText("start");
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
tv.setText("finsh");
}
@Override
protected String doInBackground(Integer... integers) {
try {
for (i= 0; i<=100; i++){
Thread.sleep(integers[0]);
publishProgress(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
pg.setProgress(values[0]);
}
}
}
效果图