zoukankan      html  css  js  c++  java
  • AsyncTask的基础讲解

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //异步任务AsyncTask,只能执行一次,在一个线程里面不能多次执行
    //耗时操作(网络,数据库操作)一般用子线程,UI界面能够改变,Handler操作,Message

    new ExamAsyncTask().execute(1,2,3);//括号里面的参数给doInBackground()
    //new ExamAsyncTask().cancel(true);//调用onCancelled这个方法
    }

    //实现一个自己的异步任务类(要写封装类):
    //<>里面的三个类,都是对应的参数类型
    //参数一:要给doInBackground的变量类型,
    //参数二,执行过程中onProgressUpdate要用的参数类型,此参数是publishProgress(这里面调用),
    //参数三,结果给onPostExecute要用的参数的类型
    class ExamAsyncTask extends AsyncTask<Integer, String, Double>{//Params,Progress,Result
    //准备执行前调用
    @Override
    protected void onPreExecute() {
    super.onPreExecute();
    Log.i("2", "准备执行任务");
    }

    //耗时操作
    @Override
    protected Double doInBackground(Integer... params) {
    Log.i("我的参数1", params[0]+"");
    Log.i("我的参数2", params[1]+"");
    Log.i("我的参数3", params[2]+"");

    publishProgress("a","b","c");//调用onProgressUpdate更新界面
    Log.i("3", "耗时操作");
    return 100.0;
    }

    //更新界面UI
    @Override
    protected void onProgressUpdate(String... values) {//values[0]就是"abc"
    super.onProgressUpdate(values);
    Log.i("values[0]", values[0]);
    Log.i("values[1]", values[1]);
    Log.i("values[2]", values[2]);
    Log.i("4", "更新界面");
    }

    //任务执行完成后调用
    @Override
    protected void onPostExecute(Double result) {
    super.onPostExecute(result);
    Log.i("5", "任务完成");
    Log.i("resut", ""+result);//打印出100
    }

    //任务取消时调用
    @Override
    protected void onCancelled() {
    super.onCancelled();
    Log.i("6", "取消任务");

    }
    }
    }

    使用AsyncTask类,以下是几条必须遵守的准则:
    Task的实例必须在UI thread中创建;
    execute方法必须在UI thread中调用;
    不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
    该task只能被执行一次,否则多次调用时将会出现异常;

  • 相关阅读:
    【题解】 bzoj2748 [HAOI2012]音量调节 (动态规划)
    【题解】 bzoj1190: [HNOI2007]梦幻岛宝珠 (动态规划)
    【题解】 bzoj1864: [Zjoi2006]三色二叉树 (动态规划)
    【题解】 [ZJOI2006]书架 (Splay)
    【题解】 [HNOI2004]宠物收养场(Splay)
    【题解】 [HNOI2002]营业额统计 (Splay)
    【题解】 [ZJOI2008] 泡泡堂(贪心/二分图/动态规划)
    【题解】 [SDOI2009] Elaxia的路线(最短路+拓扑排序)
    Aptana Studio 3 如何汉化,实现简体中文版
    js中获得当前时间是年份和月份
  • 原文地址:https://www.cnblogs.com/wangfeng520/p/5072106.html
Copyright © 2011-2022 走看看