`

异步任务AsyncTask使用解析

 
阅读更多

AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。

AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法。注意继承时需要设定三个泛型Params,Progress和Result的类型,如AsyncTask<Void,Inetger,Void>:

  • Params是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型
  • Progress是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型
  • Result是指doInBackground()的返回值类型
上面的说明涉及到几个方法:
  • doInBackgound() 这个方法是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做
  • publishProgress() 更新进度,给onProgressUpdate()传递进度参数
  • onProgressUpdate() 在publishProgress()调用完被调用,更新进度
好了,看下实际的例子,了解一下怎么使用吧:
public class MyActivity extends Activity
{
    private Button btn;
    private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button) findViewById(R.id.start_btn);
        tv = (TextView) findViewById(R.id.content);
        btn.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v) {
                update();
            }
        });
    }
    private void update(){
        UpdateTextTask updateTextTask = new UpdateTextTask(this);
        updateTextTask.execute();
    }

    class UpdateTextTask extends AsyncTask<Void,Integer,Integer>{
        private Context context;
        UpdateTextTask(Context context) {
            this.context = context;
        }

        /**
         * 运行在UI线程中,在调用doInBackground()之前执行
         */
        @Override
        protected void onPreExecute() {
            Toast.makeText(context,"开始执行",Toast.LENGTH_SHORT).show();
        }
        /**
         * 后台运行的方法,可以运行非UI线程,可以执行耗时的方法
         */
        @Override
        protected Integer doInBackground(Void... params) {
            int i=0;
            while(i<10){
                i++;
                publishProgress(i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                }
            }
            return null;
        }

        /**
         * 运行在ui线程中,在doInBackground()执行完毕后执行
         */
        @Override
        protected void onPostExecute(Integer integer) {
            Toast.makeText(context,"执行完毕",Toast.LENGTH_SHORT).show();
        }

        /**
         * 在publishProgress()被调用以后执行,publishProgress()用于更新进度
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            tv.setText(""+values[0]);
        }
    }
}
 from:http://blog.csdn.net/wxg630815/article/details/7003812
分享到:
评论

相关推荐

    Android最全最简单的异步任务AsyncTask使用解析

    Android最全最简单的异步任务AsyncTask使用解析.一步到位彻底理解异步任务。

    A0403异步任务AsyncTask1

    1.1 知识解析 1.3 实战操作 1.4 职业素质

    AsyncTask加载ListView的Item图片完整版

    使用AsyncTask去加载json,并通过json里面的Item的Url去加载ListView条目的图片。...在空闲状态才进行图片加载,其他时间取消异步任务(或者取消子线程任务) c.判断首次预加载的时机,进行首次预加载

    json解析+异步加载+listView

    包含通过json解析网络数据,添加到listView中显示出来,并有多线程和AsyncTask异步加载方式。

    Android带进度条的下载图片示例(AsyncTask异步任务)

    本文主要介绍Android带进度条的下载图片示例(AsyncTask异步任务)的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧

    Android AsyncTask使用以及源码解析

    综述  在Android中,我们需要进行一些耗时的操作,会将这个操作放在子线程中进行。在子线程操作完成以后我们可以通过Handler进行发送消息,通知UI进行一些更新...它是一个轻量级的异步任务类,它的后台任务在线程池

    Android代码-Android 一些重要知识点解析整理

    Android中的异步任务机制 Android中AsyncTak的使用与源码分析 Android AsyncTask 完全解析,带你从源码的角度彻底理解 Android 异步消息处理机制完全解析,带你从源码角度彻底理解 Android 异步消息处理机制...

    Android网络音乐播放器 源码下载

    异步任务AsyncTask执行耗时任务-音乐的收藏(使用到数据库)操作及音乐的搜索等需要访问网络的操作; 自定义view实现圆形专辑图片,滚动歌词,支持下拉刷新的音乐列表; Json解析网络响应,正则表达式解析歌词; ...

    Android AsyncTask 完美解析 看不懂源码你就输了

    android.os.AsyncTask,一个执行异步操作的类,我们可以使用它来处理后台任务,并且在UI线程中处理结果,而无需关心线程的问题。 AsyncTask 内部是使用 {@link Thread}和{@link Handler}来实现的。理想情况下,应将...

    android异步消息机制 从源码层面解析(2)

    AsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和结果传递给主线程并在主线程中更新UI。 AsyncTask这个类的声明如下 public abstract class AsyncTask&lt;Params&gt; 它提供了...

    Android使用AsyncTask加载图片的操作流程

    如果异步任务完成前,用户离开Activity或者设置发生改变,ImageView也可能不存在。 class BitmapWorkerTask extends AsyncTask&lt;Integer&gt; { private final WeakReference&lt;ImageView&gt; imageViewReference; private ...

    老罗android视频开发源码和ppt经典

    15.1 AsyncTask异步任务介绍一 15.2 AsyTask异步任务介绍二 15.3 Handler和Message(一) 15.4 Handler和Message(二) 15.5 Handler和Message(三) 15.6 Handler和Looper 15.7 Handler综合练习(图文混排)

    Android实现可以图文混合和长截图的日记本App,优秀安卓课程设计!

    1.采用了多线程技术以提升程序的性能:主要在MainActivity中的onResume()方法 中进行异步访问数据库来获取列表的信息,这里主要用了AsyncTask这个轻量级异步任务类 2.使用Sqlite来保存数据:表列项有时间(Text)、...

    Android HTTP网络请求的异步实现

    右边的异步任务,HttpClient创建,参数解析,错误处理全部交给网络处理模块来完成。由此来看,这个网络模块其实是重复性很高的开发工作,为了避免重复造轮子,下面就给大家介绍下我们工作中实现的网络操作模块及相应...

    美食家点餐

    服务端的技术常用组件(Tomcat, MySql, Servlet…)Android常用UI组件(CheckBox、Button、TextView…)、AsyncTask异步获取JSON数据、SQLite数据库的使用、自定义Adapter、JSON数据解析、BroadcastReceiver的使用、...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--异步任务AsyncTask的用法 |--异步任务的自定义 |--快捷方式增删查 |--手势识别器GestureDetector的用法 |--拍照之调用系统相机并显示及保存 |--拨打电话 |--按健之长按menu事件屏蔽 |--按健监听按返回健回桌面 |-...

    android知识大总结【邯院】

    3. AsyncTask异步处理任务 15 4. 音频播放 20 8. 视频播放 26 9. 使用摄像头拍照 32 10. 视频录制 39 11. 国际化 43 12. 样式和主题 46 13. 编码实现软件界面 49 14. 标签页(选项卡) 51 15. 用HTML实现网页界面 57...

    GameManager:示例应用程序,用于获取流行游戏的数据并处理该数据以显示在Android的本机应用程序中

    游戏管理员 示例应用程序,用于获取流行游戏的数据并...用户单击列表后,将触发另一个异步任务以获取图像 BACK,APP STORE,SMS和SHARE按钮运行良好 由于没有时间转换为饼图,因此以列表视图的形式显示了人口统计数据

Global site tag (gtag.js) - Google Analytics