定义AsyncTask子类

private class LoadContactsTask extends AsyncTask<Void, Void, List<TxrjContact>> {

    /* (non-Javadoc)
     * @see android.os.AsyncTask#doInBackground(Params[])
     */
    @Override
    protected List<TxrjContact> doInBackground(Void... params) {
        List<TxrjContact> contacts = ContactDataManager.getContacts(mContext);
        return contacts;
    }
    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPreExecute()
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = ProgressDialog.show(mContext,
                null, "loading contacts, please wait a moment");
    }
    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(List<TxrjContact> result) {
        super.onPostExecute(result);
        mContacts = result;
        mListAdapter = new ContactListAdapter(mContext, mContacts, mQuickAlphaBar);
        mListView.setAdapter(mListAdapter);
        mProgressDialog.dismiss();
    }
}

在onCreate方法中使用AsyncTask

new LoadContactsTask().execute();

 

定义AsyncQueryHandler的子类

private class AsyncQueryContacts extends AsyncQueryHandler {

    public AsyncQueryContacts(ContentResolver cr) {
        super(cr);
    }
    @Override
    protected void onQueryComplete(int token, Object cookie, Cursor c) {
        List<TxrjContact> contacts = new ArrayList<TxrjContact>();
        HashMap<Integer, TxrjContact> contactMap = new HashMap<Integer, TxrjContact>();
        if(c != null) {
            while(c.moveToNext()) {
                int contactId = c.getInt(c.getColumnIndex(Data.CONTACT_ID));
                TxrjContact contact = null;
                if(contactMap.containsKey(contactId)) {
                    contact = contactMap.get(contactId);
                } else {
                    contact = new TxrjContact();
                    contact.setContactId(contactId);
                    contact.setName(c.getString(c.getColumnIndex(Phone.DISPLAY_NAME)));
                    contact.setSortKey(c.getString(c.getColumnIndex("sort_key")));
                    contactMap.put(contactId, contact);
                    contacts.add(contact);
                }
                TxrjPhone phone = new TxrjPhone();
                phone.setId(c.getInt(c.getColumnIndex(Data._ID)));
                phone.setRawContactId(c.getInt(c.getColumnIndex(Data.RAW_CONTACT_ID)));
                phone.setContactId(c.getInt(c.getColumnIndex(Data.CONTACT_ID)));
                phone.setNumber(c.getString(c.getColumnIndex(Phone.NUMBER)));
                phone.setType(c.getString(c.getColumnIndex(Phone.TYPE)));
                phone.setLabel(c.getString(c.getColumnIndex(Phone.LABEL)));
                contact.getPhoneList().add(phone);
            }
            c.close();
        }
        mContacts = contacts;
        mListAdapter = new ContactListAdapter(mContext, mContacts, mQuickAlphaBar);
        mListView.setAdapter(mListAdapter);
        mProgressDialog.dismiss();
        super.onQueryComplete(token, cookie, c);
    }
}

在onCreate方法中使用AsyncQueryHandler

private AsyncQueryContacts asyncQuery;

asyncQuery = new AsyncQueryContacts(getContentResolver());
mProgressDialog = ProgressDialog.show(mContext,
        null, "loading contacts, please wait a moment");
asyncQuery.startQuery(0, null, Data.CONTENT_URI,
    new String[] {Data._ID, Data.CONTACT_ID, Data.RAW_CONTACT_ID,
        Phone.DISPLAY_NAME, Phone.NUMBER, Phone.TYPE, Phone.LABEL, "sort_key"},
    Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
    null, "sort_key COLLATE LOCALIZED asc");

AsyncTask和AsyncQueryHandler之比较的更多相关文章

  1. StrictMode使用详解

    http://hb.qq.com/a/20110914/000054.htm http://www.android100.org/html/201204/25/1097.html http://www ...

  2. Android 第二波

    三面,4个技术人员面试的问题不是很难.问题如下: 1. Service两种方式的区别 首先说service分为两种,一种是绑定的一种是非绑定的非绑定的生命周期是 onCreate(),onStartC ...

  3. App优化 StrictMode 严格模式

    StrictMode简介 StrictMode最常用来捕捉应用程序的主线程,它将报告与线程及虚拟机相关的策略违例.一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈tra ...

  4. [转发]Android 系统稳定性 - ANR(三)

    文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任. 很久之前写的了,留着有点浪费,共享之. 编写者:李文栋 http://rayleeya.iteye.com/blog/1956056 1. ...

  5. [转]【安卓笔记】AsyncTask源码剖析

    [转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...

  6. Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案

    一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...

  7. Android笔记——AsyncTask介绍

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

  8. Android线程管理之AsyncTask异步任务

    前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...

  9. Android中使用AsyncTask实现文件下载以及进度更新提示

    Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和 ...

随机推荐

  1. Shell下的通配符、特殊符号和文件描写叙述符

    一:通配符 * 代表『 0 个到无穷多个』随意字符 演示样例:找出 /etc/ 底下以 cron 为开头的文件名称的文件 [root@instructor Desktop]# ls /etc/cron ...

  2. MiniGUI ial 移植指南

    MiniGUI ial 移植指南 2.1 ial的定义 ial是一个通用的抽象输入接口,可以输入统一的数据的结构,也就是说在MiniGUI的核心代码里输入的数据的格式是固定的,不管输入设备是鼠标 还是 ...

  3. 我所遭遇过的游戏中间件--Havok

    我所遭遇过的游戏中间件--Havok Havok是我接触的第一款游戏中间件,那是在五,六年前,我刚刚毕业,对游戏开发还是个菜鸟.我记得先是对游戏场景中的地形和其他静态物体生成刚体,然后做角色的Ragd ...

  4. 解决:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面

    错误重现: 在发布网站的过程中,虽然不是第一次发布了,但是还是遇到了很多的问题.为了以后可以轻松解决此类问题还是积累下来比较好. 问题:HTTP 错误 404.2 - Not Found. 由于 We ...

  5. 第十六章 springboot + OKhttp + String.format

    模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...

  6. 第八章 JVM性能监控与故障处理工具(2)

    注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...

  7. Python操作Excel表格,xlwt模块的使用

    Python可以操作Excel的模块不止一种,我习惯使用的写入模块是xlwt(一般都是读写模块分开的) 按照模块使用pip install xlwt 就行了,很常规的方式 直接进代码解析,本文源码 w ...

  8. JavaScript游戏中的面向对象的设计

    简介: 从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句.在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计.本文将概述原 ...

  9. JavaScript数组与字符串常用方法总结

    先来一段代码引子: var str='hello world'; alert(str.charAt());//通过下标查找值: alert(str.indexOf());//通过值查找字符串下标:没有 ...

  10. iframe多层嵌套时获取元素

    一.同域:1.父页面获取子页面元素:注意:onload事件jQuery获取:$("iframe").contents().find("holder")..... ...