Android-AsyncTask初体验

来源:互联网 发布:苹果手机mac地址修改 编辑:程序博客网 时间:2024/06/09 14:57

AsyncTask学习记录

AsyncTask介绍

  • 异步任务
  • 为了解决不能在主线程做耗时操作,不能在子线程更新UI
  • 是android提供的轻量级的异步类,简单,快捷

具体详细代码如下(布局过于简单这就不给出了)

public class MyAsyncTaskText extends Activity{    private TextView startText, progerssText, endText;    private Button startBtn;    private MyAsync myAsync;    @Override    protected void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        startText = (TextView) findViewById(R.id.text1);        progerssText = (TextView) findViewById(R.id.text2);        endText = (TextView) findViewById(R.id.text3);        startBtn = (Button) findViewById(R.id.button1);        myAsync = new MyAsync();        startBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {            //执行异步AsyncTask,并传入可变参数,它的doInBackground方法能收到                myAsync.execute("a","b");            }        });    }        /**     * 使用步骤     * 1、写一个类继承自AsyncTask     * 有三个范型     * 1、请求参数的类型     * 2、进度的类型     * 3、返回结果的类型     */    class MyAsync extends AsyncTask<String, Integer, String>    {            /**         * 相当于子线程的操作         * 参数:String...     这叫可变参数(可以传0~n) 相当于一个数组         * 在调用异步任务的时候传递过来的         * 返回值   会将返回的结果返回到onPostExecute的方法中         * 必须重写         */        @Override        protected String doInBackground(String... params) {            //用来处理字符串变化            StringBuilder builder = new StringBuilder(Arrays.toString(params));            int i = 0;            while(builder.length() < 30)            {                //每隔0.2秒添加一个字符,并更新进程                builder.append(i++);                //更新进程,此时会自动调用onProgressUpdate方法                publishProgress(i);                try {                    Thread.sleep(200);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            return builder.toString();        }        //这下面的三个方法都能更新UI        //当异步任务开始执行的时候调用        @Override        protected void onPreExecute() {            super.onPreExecute();            startText.setText("开始执行异步操作");                  }                /**         * 必须调用publishProgress(values)方法才能调用到onProgressUpdate方法         * 当进度更新的时候调用         */        @Override        protected void onProgressUpdate(Integer... values) {            super.onProgressUpdate(values);            progerssText.setText("当前进度 :" + values[0]);        }         /**       * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)       * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置       */         @Override        protected void onPostExecute(String result) {            super.onPostExecute(result);            endText.setText("异步操作执行结束\n result=" + result);        }    }}

最终效果如下

最终效果图

我的感受

  • 现在我感觉这东西真是太好用了,只需覆写几个方法,就可以对线程当前状态进行观察,而且在onPreExecute、onProgressUpdate、onPostExecute中还能对UI控件进行操作
  • 这东西用来做进度条是再好不过的了
  • 结构很明了

想说的话

  • 博客坚持写,不管怎样,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们
  • 若内容有什么地方不对、不清楚,望吐槽,希望大家能一起快乐学习和成长
  • 来一句:有时候我们的想法会被否决,即便后来发现我们是对的,也不可存在怨恨情绪,或者说类似于“我老早就说过会这样,还不信”的话。不要让团队之间由此产生间隙,不要因为这点小事耿耿于怀、常常抱怨。
0 0
原创粉丝点击