Android技能之-AsyncTask

AsyncTask,是一个Android封装好的轻量级异步类,是Android应用在多线程使用上常用的方法之一,可降低异步通信的开发难度

如何使用

    public class UserLoginTask extends AsyncTask<String, Integer, String> {
        UserLoginTask(String loginId, String password) {
            ALog.vTag(TAG, "loginId:%s,password:%s", loginId, password);
        }

        /**
         * 开始执行后台线程时调用,当前处于UI线程
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ALog.vTag(TAG, "onPreExecute ...");
        }

        /**
         * 开始执行后台线程任务,AsyncTask子线程
         */
        @Override
        protected String doInBackground(String... params) {
            ALog.vTag(TAG, "params:%s", Arrays.toString(params));
            // TODO: 执行耗时的业务
            return "doInBackground返回的数据";
        }

        /**
         * 刷新线程,调用publishProgress(i)时回调,一般用于刷新进度,比如doInBackground中调用publishProgress进行进度刷新,UI线程
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            ALog.vTag(TAG, "values:%s", Arrays.toString(values));
        }

        /**
         * 后台线程结束时调用,当前处于UI线程
         */
        @Override
        protected void onPostExecute(String success) {
            ALog.vTag(TAG, "success:%s", success);
        }

        @Override
        protected void onCancelled() {
            ALog.vTag(TAG, "onCancelled ....");
        }
    }

实例并启动后台线程

mAuthTask = new UserLoginTask(loginId, password);
mAuthTask.execute("我是URL","我是param1");

生命周期说明

  • onPreExecute() 后台线程通知UI线程,后台线程开始执行
  • doInBackground(Params... params) 后台线程,处理耗时任务,其中参数params为execute(Params… params)所携带的参数数组内容
  • onPostExecute(Result result)后台线程处理完业务逻辑后反馈执行结果给UI线程,其中参数result为doInBackground返回的数据内容
  • onProgressUpdate(Progress... values)后台线程实时反馈执行过程给UI线程,一般用在UI的进度刷新,其中参数为在doInBackground回调中调用publishProgress(Progress… values)方法所带入的参数values
  • onCancelled()后台进程执行完成或者执行过程中被主动执行cancel(boolean mayInterruptIfRunning)时调用,此时onPostExecute就不被回调
    其中,这些接口上的参数,取决于实例AsyncTask<Params, Progress, Result>时所定义的类型,如上面使用例子定义的是AsyncTask<String, Integer, String>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章