Android学习之异步任务AsyncTask

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()用在异步任务执行时。

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


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值