断其一指------异步任务(AsyncTask)

这个东西我学了好几遍,总觉得格式很别扭……

AsyncTask 异步处理

解决的问题:在子线程中,有的时候也需要多次动态更新UI,此时,除了使用Handler之外,用AsyncTask也是一种相对比较简洁的方式:

AsyncTask<Params,Progress,Result> 是一个抽象类,用来被继承的。

1.三个参数

Params 启动任务执行输入参数的类型

Progress 后台任务完成进度的类型

Result 执行任务完成后返回的结果

2.如何使用AsyncTask

(1)创建一个类继承AsyncTask

(2)根据需要,实现AsyncTask的如下方法:

·doInBackground(Params。。。) 后台线程将要执行的任务。该方法可以调用publishProgress(Progress。。。)更新任务的执行进度

·onProgressUpdate(Progress。。。)在doInBackground方法被调用时会触发

·onPreExecute() 在执行耗时操作前调用,用于完成一些准备工作

·onPostExecute(Result。。。) 当doInBackground完成后,系统会自动调用onPostExecute方法,并把doInBackground的返回值传给该方法。

public class AsyncTaskActivity extends Activity implements View.OnClickListener {
    private Button mBtnDownload;
    private ProgressBar mPbProgress;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_async_task);
        mBtnDownload = (Button) findViewById(R.id.btn_download);
        mBtnDownload.setOnClickListener(this);
        mPbProgress = (ProgressBar) findViewById(R.id.pb_download);
        mPbProgress.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.btn_download:
                MyTask myTask = new MyTask();
                myTask.execute();
                break;
        }
    }

    class MyTask extends AsyncTask<Void,Integer,Boolean>
    {
        //在后台执行的任务
        protected Boolean doInBackground(Void... params) {
            for(int i = 1 ; i <= 10 ; i++)
            {
                try
                {
                    Thread.sleep(1000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                publishProgress(i*10);
            }
            return true;
        }

        //执行前的准备工作
        protected void onPreExecute() {
            super.onPreExecute();
            mPbProgress.setVisibility(View.VISIBLE);
        }

        //执行后的结束后调用
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
            Toast.makeText(AsyncTaskActivity.this,"下载完毕!",Toast.LENGTH_SHORT).show();
        }

        //doInBackground中,调用publishProgress后会触发该方法
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            mPbProgress.setProgress(values[0]);
        }
    }
}

版权声明:刚出锅的原创内容,希望对你有帮助~

时间: 2024-10-10 13:47:23

断其一指------异步任务(AsyncTask)的相关文章

异步任务AsyncTask使用解析

在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任

android异步类AsyncTask的简单使用

Android为了降低这个开发难度,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务,更通俗地说就是一个执行后台任务的线程 而且他还会自动通知主线程更新UI 优点: 结构清晰,容易理解. 缺点 代码量稍大 下面直接看代码 1 private class AsyncLogin extends AsyncTask<Void,Integer,Boolean>{ 2 private EditText passwordEdit; 3 private EditT

Android异步之Asynctask与Handler面试七问

提出问题: 1.Android中的异步处理方式? 2.如何使用Handler以及在使用过程中如何避免Handler引起的内存泄露? 3.从源码角度分析MessageQueue,Message,handler,looper,主线程,子thread之间的关系 4.Handler通过sendMessage以及post Runable对象有什么区别 5.如何给一个线程建立消息循环,即如何构建一个looper线程? 6.Asynctask中有哪些方法,分别如何使用,哪些方法在主线程执行,哪些方法在子线程执

Android 之异步任务(AsyncTask,Handler,Message,looper)

AsyncTask: 3个类型(Params,Progress和Result),4个步骤(onPreExecute(),doInBackground(Params…),onProgressUpdate(Progress…), onPostExecute(Result) ) Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异

Android利用异步任务AsyncTask发送post请求获取json数据

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 )Handler异步实现的原理和适用的优缺点 AsyncTask介绍 Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理.

异步任务 AsyncTask

注:转载注明出处 异步任务:用于解决线程之间的数据传递(UI线程不能完成耗时操作,由子线程完成) AsyncTask异步任务执行流程: 1 继承AsyncTask类 参数:parmas   progress  result class MyAsyncTask extends AsyncTask<String, Integer, Integer>{ 重写3个方法 A: protected void onPreExecute(){ 耗时操作之前的准备工作(主线程) super.onPreExecu

android 异步任务AsyncTask

package com.example.ansyctest; import java.io.ByteArrayOutputStream; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl

Android笔记二十六.Android异步任务处理(AsyncTask)

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言 我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕绘图事件等,对于其他的操作尽量不要在UI线程中实现,因为这些操作很有可能会阻塞UI线程,比如一些耗时操作,会导致UI界面停止响应,从而降低了用户的体验.所以,为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完成,但新线程也可能需要动态更新UI组件:比如需要从网上获取一个网页,然后在Te

安卓的异步任务AsyncTask

今天作者学习了安卓的异步任务,异步任务听起来是个好高大上的东西,其实并没有好高大上. 异步任务到底是什么东西呢?广泛地讲异步任务就是以多线程的方式完成的功能需求,相对于同步 而言,异步任务就是可以先完成第一步,开启一个线程完成第二步,而不需要等待第二步的完成就可 以去做第三步的事情.而同步任务就是要按顺序的完成任务,先完成第一步,在完成第二步,才能开始 第三步的事情.在安卓中异步任务值得就是AsyncTask这个类.这个类其实就是对Thread+Handler的封装 我们使用这个类就可以很简单地