Android学习---使用异步内部类实现进度条加载效果

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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]);

        }


    }
}

效果图
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34291777/article/details/72621911
今日推荐