AsyncTask简单使用

来源:互联网 发布:术大师淘宝论坛 编辑:程序博客网 时间:2024/05/22 00:55
package com.tyran.ansynctask_demo1;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.OnClick;public class MainActivity extends AppCompatActivity {    @BindView(R.id.TV_Main)    TextView TVMain;    @BindView(R.id.PB_Main)    ProgressBar PBMain;    @BindView(R.id.BTN_Main)    Button BTNMain;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);    }    @OnClick(R.id.BTN_Main)    public void onClick() {        PBAsyncTask asyncTask = new PBAsyncTask();        asyncTask.execute();    }    class PBAsyncTask extends AsyncTask<Void, Integer, Boolean>    {        private int progress;        //主线程运行        //在异步线程运行前,在主线程做一些准备工作        @Override        protected void onPreExecute() {            Log.d("PBAsyncTask", "onPreExecute:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId());            super.onPreExecute();            PBMain.setVisibility(View.VISIBLE);            progress = 0;        }        //异步线程运行        //在异步线程里运行一些耗时操作,或者逻辑操作        @Override        protected Boolean doInBackground(Void... params) {            Log.d("PBAsyncTask", "doInBackground:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId());            while (true) {                //模拟处理数据,每500ms,ProgressBar跳动一次                try {                    if(progress <= 100) {                        Thread.sleep(500);                        progress += 10;                        //publishProgress执行后会回调onProgressUpdate方法,并把参数传递给onProgressUpdate                        publishProgress(progress);                    }else {                        return true;                    }                } catch (InterruptedException e) {                    e.printStackTrace();                    return false;                }            }        }        //主线程运行        //通过publishProgress传过来的参数,在主线程操作UI        @Override        protected void onProgressUpdate(Integer... values) {            super.onProgressUpdate(values);            Log.d("PBAsyncTask", "onProgressUpdate:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId());            PBMain.setProgress(values[0]);        }        //主线程运行        //doInBackground结束后回调,并将doInBackground的返回值传递过来        @Override        protected void onPostExecute(Boolean aBoolean) {            super.onPostExecute(aBoolean);            Log.d("PBAsyncTask", "onPostExecute:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId());            if(aBoolean)            {                TVMain.setText("Work Finished");            }else {                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();            }        }    }}

0 0