Android学习之异步任务AsyncTask

来源:互联网 发布:微信 for ubuntu 编辑:程序博客网 时间:2024/06/01 12:43

Android中有几种实现异步任务的方式,比如Handler,比如AsyncTask,Handler比较复杂,今天就不写了,相信不少童鞋都使用过AsyncTask,当然也有不少童鞋还不知道怎么用AsyncTask,今天就写下AsyncTask。AsyncTask和Handler有一些区别,简单来说就是单个异步任务时使用AsyncTask比较简单,多个异步任务时使用Handler比较方便。

AsyncTask有几个重要的是方法,来讲下常用的几个方法,以下是Demo:

/** * 主界面 * * @author yuzhentao */public class MainActivity extends Activity {    private FrameLayout fl;    private ProgressBar pb;    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView();        initView();    }    private void setContentView() {        setContentView(R.layout.activity_main);    }    private void initView() {        fl = (FrameLayout) findViewById(R.id.framelayout_activity_main);        pb = (ProgressBar) findViewById(R.id.progressBar_activity_main);        tv = (TextView) findViewById(R.id.textview_activity_main);        findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new AsyncTask<Integer, Integer, String>() {                    @Override                    protected void onPreExecute() {                        super.onPreExecute();                        fl.setVisibility(View.VISIBLE);                        tv.setText("0%");                    }                    @Override                    protected void onPostExecute(String s) {                        super.onPostExecute(s);                        fl.setVisibility(View.INVISIBLE);                        Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();                    }                    @Override                    protected void onProgressUpdate(Integer... values) {                        super.onProgressUpdate(values);                        String progress = values[0] + "%";                        pb.setProgress(values[0]);                        tv.setText(progress);                    }                    @Override                    protected String doInBackground(Integer... params) {                        int i;                        for (i = 0; i <= 100; i += 10) {                            try {                                Thread.sleep(500);                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                            publishProgress(i);                        }                        return "异步任务执行完成";                    }                }.execute();            }        });    }}
AsyncTask有3个参数
AsyncTask<Params, Progress, Result>
第一个参数用在doInBackground()中,这个参数的值由execute()传入。

第二个参数用在onProgressUpdate()中,这个参数的值由doInBackground()中的publishProgress()传入。

第三个参数用在onPostExecute()中,这个参数的值由doInBackground()返回的值传入。

doInBackground()中不能执行UI相关的操作,不能在主线程执行,这些操作用在onProgressUpdate()、onPreExecute()和onPostExecute()中,doInBackground()是AsyncTask用来执行异步任务的核心,这里面可以做一些耗时的操作。

onPreExecute()用在异步任务执行前,onPostExecute()用在异步任务执行后,onProgressUpdate()用在异步任务执行时。

好,大概就是这样,最后是效果图:


1 0
原创粉丝点击