Android多线程--AsyncTask

来源:互联网 发布:wind万得资讯的数据库 编辑:程序博客网 时间:2024/06/17 20:26

安卓中开启多线程的博客在这里

Android多线程–Handler
这里只讲解一下AsyncTask

AsyncTask

  • 其实AsyncTask就是用安卓中的消息处理机制进行封装好的一个类,可以在其中特定的方法中修改ui界面
  • 主线程逻辑代码
  • 主线程中,仅仅写了一个点击按钮,同时开启一个AsyncTask的任务,并无其他复杂的操作
public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button button;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        button= (Button) findViewById(R.id.button);        button.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.button:                new UpdateTask(button,getApplicationContext()).execute();                break;        }    }}
  • 下面我们来看一下重点,我们自己继承自AsyncTask的类中的代码逻辑
public class UpdateTask extends AsyncTask<Void,Integer,Boolean> {    private Button button;    private Context context;    public UpdateTask(Button button,Context context) {        this.button = button;        this.context=context;    }    //这个方法会在后台任务开始之前调用,进行一些界面的初始化    protected void onPreExecute() {        super.onPreExecute();        Toast.makeText(context, "我开始了", Toast.LENGTH_SHORT).show();        button.setText("我开始啦");    }        //开启的新的子线程,用户后台中执行耗时的任务        protected Boolean doInBackground(Void... params) {            int count=0;            while(true){                count++;                publishProgress(count);                try {                    Thread.sleep(200);                } catch (InterruptedException e) {                    e.printStackTrace();                }                if (count>=100){                    break;                }            }            return true;        }    //当后台任务调用了publishProgress方法后,调用此方法,,可以对UI更新    protected void onProgressUpdate(Integer... values) {        super.onProgressUpdate(values);        button.setText(values[0]+"");    }    //任务结束的时候会发生调用,用来进行一些界面的更新    protected void onPostExecute(Boolean aBoolean) {        super.onPostExecute(aBoolean);        if (aBoolean) {            Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show();            button.setText("我结束啦");        }    }}
  • 效果图
    这里写图片描述
0 0
原创粉丝点击