zoukankan      html  css  js  c++  java
  • AsyncTask

    AsyncTask

    相当于对handle的封装,可以更方便我们在子线程和主线程中传递数据。

    并且因为AsyncTask中采用线程池机制,所以速度比handle快。

    AsyncTask写成内部类,我们就可以调用主线程里面的变量,例如后面onProgressUpdate来更新activity就需要主线程里面的变量。

    AsyncTask中我们被重写的方法一般三个:onPreExecute、doInBackground、onPostExecute

    onPreExecute最先被执行,用来加载对话框什么的,提示用户我们下面要进行耗时操作了。

    doInBackground我们在这一部分里面执行耗时的操作,比如说网络访问。

    onPostExecute在doInBackground方法后面执行,可以用获取到的网络数据更新activity,result参数就是用来传结果数据的。

    比如现在改变需求:

    我们要下载一个很大的东西,比如王者荣耀,所以我们要给用户显示我们的下载进度。

    这个时候可以在doInBackground中添加publishProgress方法,publishProgress方法会去调用AsyncTask重写的onProgressUpdate方法,

    我们可以在onProgressUpdate方法中去更新进度条。

    AsyncTask中的progress参数就是做这个用的。

     1 package com.example.asynctask;
     2 
     3 import android.app.Activity;
     4 import android.os.AsyncTask;
     5 import android.os.Bundle;
     6 import android.util.Log;
     7 import android.widget.TextView;
     8 
     9 public class MainActivity extends Activity {
    10     private TextView tv_text;
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         setContentView(R.layout.activity_main);
    16         tv_text = (TextView) findViewById(R.id.tv_text);
    17         
    18         MyAsyncTask task=new  MyAsyncTask();
    19         //执行
    20         task.execute("www.baidu.com");
    21     }
    22 
    23     class MyAsyncTask extends AsyncTask<String,Integer, String> {
    24         /**
    25          * 被主线程执行,在doInBackground函数前执行
    26          * */
    27         @Override
    28         protected void onPreExecute() {
    29             // 弹加载对话框
    30             Log.d("bh", "onPreExecute");
    31         }
    32 
    33         /**
    34          * 被子线程执行,用来处理耗时行为
    35          * */
    36         @Override
    37         protected String doInBackground(String... params) {
    38             Log.d("bh", "doInBackground:"+params[0]);
    39             for(int i=1;i<=100;i++){
    40                 try {
    41                     Thread.sleep(1000);
    42                     //推送当前的进度
    43                     publishProgress(i);
    44                 } catch (InterruptedException e) {
    45                     e.printStackTrace();
    46                 }
    47             }
    48             return null;
    49         }
    50         @Override
    51         protected void onProgressUpdate(Integer... values) {
    52             //更新UI上的进度
    53             tv_text.setText(values[0]+"");
    54         }
    55         /**
    56          * 被主线程执行,在doInBackground函数后执行
    57          * */
    58         @Override
    59         protected void onPostExecute(String result) {
    60             Log.d("bh", "onPostExecute");
    61             // 更UI数据
    62             tv_text.setText(result);
    63         }
    64     }
    65 }
  • 相关阅读:
    0 到 1 掌握:Vue 核心之数据双向绑定
    前端性能优化, 从哪些方面入手? (缩略版)
    MDN中定义的Function.prototype.call()和apply()与bind()
    应聘前端开发的一次笔试题目(某数据挖掘分析公司)
    应聘前端开发的一次笔试题目(某电信子公司)
    应聘前端开发的一次笔试题目(某外资公司)
    算法之杨辉三角形(Java语言)
    算法之求质数(Java语言)
    微信小程序背景
    备份恢复(一)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7483832.html
Copyright © 2011-2022 走看看