线程之间的数据传输之AsyncTask
来源:互联网 发布:磁贴数据库已损坏 编辑:程序博客网 时间:2024/05/18 00:17
1.底层仍然是通过Handler来实现线程通讯
2.用AsyncTask的好处在于代码更加清晰,便于管理和维护
3.提供了线程池(预加载许多线程)节省了时间,线程池是静态的
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
多个AsyncTask对象共用一个线程池
4.使用AsyncTask不用写flag来结束子线程
代码:
public class MainActivity extends Activity {private TextView tv_txt;private MyAsyncTask task;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_txt=(TextView) findViewById(R.id.tv_txt);//创建自定义AsyncTask对象task=new MyAsyncTask();//执行任务//传入的参数供doInBackground使用task.execute("http://www.baidu.com");}/** * 这里的三个泛型依次对应 * 第一个String对应doInBackground的可变参数String... params * Integer对应onProgressUpdate的可变参数Integer... values * 第二个String对应onPostExecute的参数String result * */private class MyAsyncTask extends AsyncTask<String,Integer,String> {/** * 主线程调用,在doInBackground之前执行 * */@Overrideprotected void onPreExecute() {//通常用于弹加载对话框Log.d("ein", "onPreExecute");}/** * 子线程调用,在onPreExecute之后执行 * 返回的值作为参数传入onPostExecute方法 * */@Overrideprotected String doInBackground(String... params) {Log.d("ein","正在请求:"+params[0]);try {//模拟网络请求for(int i=1;i<=100;i++){Thread.sleep(1000);Log.d("ein",i+"");//推送进度信息//该方法会去调用onProgressUpdate方法publishProgress(i);}String str="需要被传输的数据";return str;} catch (InterruptedException e) {e.printStackTrace();}return null;}/** * 主线程调用,在doInBackground之后执行 * */@Overrideprotected void onPostExecute(String result) {Log.d("ein", "onPostExecute");tv_txt.setText(result);//关闭加载对话框}/** * 主线程调用,更新进度时调用 * */@Overrideprotected void onProgressUpdate(Integer... values) {tv_txt.setText(values[0]+"%");}}@Overrideprotected void onDestroy() {super.onDestroy();//AsyncTask中的cancel方法实现了结束子线程,//所以不需要像handler那样写flagtask.cancel(true);}}
0 0
- 线程之间的数据传输之AsyncTask
- 线程之间通讯之AsyncTask与Handler的区别
- Exchanger 线程之间数据传输
- AsyncTask机制实现线程之间的通信
- 五、Nio之通道之间的数据传输
- activity之间的数据传输
- Activity之间的数据传输
- UDP之间 的数据传输
- 通道之间的数据传输
- Intent之间的数据传输
- AsyncTask和Handler异步线程之间的区别
- 线程之AsyncTask的完全解析
- 5.Java NIO系列教程之通道之间的数据传输
- NIO边看边记 之 通道之间的数据传输(五)
- nio 本地文件操作之通道之间的数据传输
- android 线程之AsyncTask
- 异步线程之AsyncTask
- 线程通信之AsyncTask
- 蓝桥杯 历届试题 有理数类
- A Great Start!
- 如何用八进制和十六进制来表示整形数据
- 设置eclipse编码方式
- 搬瓦工安装Netspeeder加速教程
- 线程之间的数据传输之AsyncTask
- Android Binder 机制(超级详尽): reference 1#
- [AC自动机+数位DP] ZOJ3494 BCD Code
- Android5.1应用统计源码分析
- adb基本命令和Logcat基本命令
- Android 学习资料收集
- 关于centos7中使用rpm方式安装mysql5.7版本后无法使用root登录的问题
- Android深入浅出之Binder机制: Reference 2#
- Java - Socket example: EchoClient and EchoServer