AsyncTask和AsyncQueryHandler之比较
定义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之比较的更多相关文章
- StrictMode使用详解
http://hb.qq.com/a/20110914/000054.htm http://www.android100.org/html/201204/25/1097.html http://www ...
- Android 第二波
三面,4个技术人员面试的问题不是很难.问题如下: 1. Service两种方式的区别 首先说service分为两种,一种是绑定的一种是非绑定的非绑定的生命周期是 onCreate(),onStartC ...
- App优化 StrictMode 严格模式
StrictMode简介 StrictMode最常用来捕捉应用程序的主线程,它将报告与线程及虚拟机相关的策略违例.一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈tra ...
- [转发]Android 系统稳定性 - ANR(三)
文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任. 很久之前写的了,留着有点浪费,共享之. 编写者:李文栋 http://rayleeya.iteye.com/blog/1956056 1. ...
- [转]【安卓笔记】AsyncTask源码剖析
[转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...
- Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案
一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...
- Android笔记——AsyncTask介绍
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...
- Android线程管理之AsyncTask异步任务
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
- Android中使用AsyncTask实现文件下载以及进度更新提示
Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和 ...
随机推荐
- javascript级联菜单,数据从数据库中获取
1.html代码: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import=&qu ...
- linux 复制目录结构,但不复制文件
find src -type d | sed 's/src/mkdir -p dst/'|sh
- 如何利用启明星Portal门户系统的Page模块构建工作流表单
启明星门户网站的Pages模块支持构建自定义表单系统.这使得对于使用表单收集用户数据的需求来说非常有用. 本文介绍如何构建一个简单的“出差系统”. 1.在页面里增加Pages模块,建立人事部部门,然后 ...
- Informatica 常用组件Source Qualifier之八 Distinct
如果希望 PowerCenter 从源选择唯一值,您可以使用"选择相异"选项.例如,您可以使用此功能从列出总销售额的表中提取唯一客户标识.使用"选择相异"过滤器 ...
- 第一章 EL表达式常见用法
el最常用的几种使用场景: 从配置文件中读取属性 缺失值情况下,配置默认值 el内部字符串使用String的方法 三目运算符 正则表达式 注入系统属性(system properties) 调用系统原 ...
- Linux监听进程是否存在,并加入定时任务
前言 我们在linux主机上可能需要一直运行某一服务,如果关机后或者误杀,使得服务停止,从而影响日常的任务.比如一BI项目数据库的抽取,使用Taskctl调度,在每天固定时间进行数据的抽取,如果主机上 ...
- RV 多样式 MultiType 聊天界面 消息类型 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- IDA 远程调试 Android so
1.把ida 目录下android_server 传到android 目录中如:adb push android_server /data/local/tmp/adb shell 进入模拟器cd ...
- Transformer中引用iqd作为数据源的时候数据预览出现乱码
在cognos开发利用transform建模的过程中导入iqd数据源预览乱码问题,下面先描述一下环境 操作系统版本: [root@enfo212 ~]# cat /proc/version Linux ...
- python 初步学习
疑惑1:windows下的python 如何设置显示汉字 推荐几个学习网址,也方便自己以后查看: http://pmghong.blog.51cto.com/3221425/d-10 www.w3c ...