AsycnTask

AsycnTask

  • AsyncTask主要是用于异步操作的,比如网络请求跟刷新UI操作,网络请求需要在主线程中,刷新UI 需要在子线程中
  • execute():启动AsyncTask
  • onPreExecute():启动AsyncTask就调用,是在主线程中执行
  • doInBackground():onPreExecute()执行完后调用,是在子线程中执行
  • onPostExecute():doInBackground()执行后调用的,是在主线程执行 的
  • onProgressUpdate():用于实时刷新UI
  • AsyncTask<参数一,参数二,参数三>
    • 参数一:是execute方法的参数,也是doInBackground()方法的参数
    • 第二个参数是publishProgress方法的参数类型,也是onProgressUpdate方法的参数类型
    • 第三个参数是从后台返回到前台的数据类型,也是doInBackground()方法的返回值

代码


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
    }

    public void click(View view) {
        //第一个参数是execute方法的参数,也是doInBackground()方法的参数
        //第二个参数是publishProgress方法的参数类型,也是onProgressUpdate方法的参数类型
        //第三个参数是从后台返回到前台的数据类型,也是doInBackground()方法的返回值
        AsyncTask<String, Integer, String> asyncTask = new AsyncTask<String, Integer, String>() {

            //这个方法在doInBackground方法之前执行,并且是在主线程中执行,可以做一些网络请求前的初始化操作
            @Override
            protected void onPreExecute() {
                Log.v("lai", "准备中。。。。");
            }

            // 执行子线程的方法
            @Override
            protected String doInBackground(String... params) {
                Log.v("lai", params[0]);

                //模拟一个耗时操作
                for (int i = 1; i <= 100; i++) {
                    SystemClock.sleep(50);
                    //通知onProgressUpdate方法修改UI
                    publishProgress(i);
                }

                String result = "请求完毕。。。";

                return result;
            }

            //这个方法用来实时刷新UI的,一般和doInBackground方法结合使用的
            @Override
            protected void onProgressUpdate(Integer... values) {
                tv.setText(values[0].intValue() + "");
            }

            //doInBackground方法执行完后,会执行该方法,并且该方法是在主线程执行的
            @Override
            protected void onPostExecute(String result) {
                Log.v("lai", result);
                //刷新UI只能在主线程中操作
                Toast.makeText(MainActivity.this, "我是吐司", 0).show();
            }

        };

        //启动一个耗时操作
        asyncTask.execute("网络请求开始啦。。。。");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值