AsyncTask

可以自己写一个 AsyncTask, 唉.
实际开发中, 如果用 AsyncTask 访问网络, 可以重写一个AsyncTask, 加上判断网络状态的功能
    protected abstract class MyHttpTask<Params> extends AsyncTask<Params, Void, Message> {
        // 当前BaseView类中无法获知需要进行什么操作
        // protected Message doInBackground(Params... params) {
        // // TODO Auto-generated method stub
        // return null;
        // }
        // 效仿Thread----start方法改造:具有判断网络的功能
        // @Override 无法Override AsyncTask 的 execute方法
        public final AsyncTask<Params, Void, Message> executeProxy(Params... params) {
            if (NetUtil.checkNetType(context)) {
                return execute(params);
            } else {
                PromptManager.showNoNetWork(context);
            }
            return null;
        }
    }

}

使用如下:
        new MyHttpTask<Integer>() {
            protected void onPreExecute() {
                PromptManager.showProgressDialog(context);
            }
            @Override
            protected Message doInBackground(Integer... params) {
                CommonInfoEngine engine = BeanFactory.getImpl(CommonInfoEngine.class);
                return engine.getCurrentIssueInfo(params[0]);
            }
            protected void onPostExecute(Message result) {
                PromptManager.closeProgressDialog();
                // 判断返回信息
                if (result != null) {
                    Oelement oelement = result.getBody().getOelement();
                    if ("0".equals(oelement.getErrorCode())) {
                        // 更新界面
                        CurrentIssueElement element = (CurrentIssueElement) 

result.getBody().getElements().get(0);

                        // 存储信息到bundle
                        bundle = new Bundle();
                        bundle.putString("issue", element.getIssue());
                        //更新标题
                        setTitle();
                    } else {
                        PromptManager.showToast(context, oelement.getErrorMsg());
                    }
                } else {
                    // 提示用户
                    PromptManager.showToast(context, "服务器忙请稍后重试……");
                }
            }

}.executeProxy(ConstantValue.SSQ);

 

AsyncQueryHandler

查询数据库可能是比较耗时的操作, 需要把它放在新线程里.
android提供了一个专门用于简化在新线程中查询数据库的类: AsyncQueryHandler
用法如下:
    //得到cursor
    private void prepareData() {
        SmsAsyncHandler handler = new SmsAsyncHandler(getContentResolver());
        // This method begins an asynchronous query. 
        // When the query is done onQueryComplete is called.
        handler.startQuery(0, null, SmsUriUtil.CONVERSATION_URI, CONVERSATION_PROJECTION,
                null, null, "date desc");
    }
    
    //专门为查询数据库使用的异步线程类
    private class SmsAsyncHandler extends AsyncQueryHandler {
        public SmsAsyncHandler(ContentResolver cr) {
            super(cr);
        }
        // 根据上面的注释, 当startQuery完成时, 会调用这个方法
        @Override
        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
            // 这个时候, adapter可能已经创建了, 所以这个时候在给 cursor赋值就迟了
            // ConversationActivity.this.c = cursor;
            // 要使用下面的方法改变adapter的cursor
            adapter.changeCursor(cursor);
        }

}

注意最后一定要调用 adapter.changeCursor(cursor), 这样才能把cursor查出来的东西显示到ListView中.
内部原理如下:
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/ywq-come/p/5926635.html

Handler研究2-AsyncTask,AsyncQueryHandler分析相关推荐

  1. android AsyncTask 的分析与运用

    线程 在Android当中,通常将线程分为两种,一种叫做Main Thread,除了Main Thread之外的线程都可称为Worker Thread. 当一个应用程序运行的时候,Android操作系 ...

  2. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...

  3. Android `AsyncTask`简要分析

    Android `AsyncTask`简要分析 AsyncTask简要分析 经典异步任务:AsyncTask,使用场景有:批量下载,批量拷贝等.官方文档就直接给出了一个批量下载的示例. private ...

  4. R语言效用分析 ( 效能分析、Power analysis)、除了pwr包之外还有其它包、例如、基因研究中的效能分析、MBESS包可用于各种形式的效能分析和最少样本量确定、其他效用分析包的简要介绍

    R语言效用分析 ( 效能分析.Power analysis).除了pwr包之外还有其它包.例如.基因研究中的效能分析(power analysis).MBESS包可用于各种形式的效能分析(power ...

  5. Android使用Handler造成内存泄露的分析及解决方法

    Android使用Handler造成内存泄露的分析及解决方法 参考文章: (1)Android使用Handler造成内存泄露的分析及解决方法 (2)https://www.cnblogs.com/xu ...

  6. 中国环境监测行业现状研究与投资规划分析报告2022-2028年

    中国环境监测行业现状研究与投资规划分析报告2022-2028年 mmmmmm&mmmmmm鸿**mmm晟&mmm信**mmm合&mmm研**mmmmmmm究&mmm网* ...

  7. 观察性研究的网络Meta分析

    1.前言 随着真实世界研究越来越多,更多的观察性研究为当前临床治疗和决策提供重要的证据,可以补充随机对照试验证据的不足.纳人观察性研究的网络Meta分析可更全面地评估当前的临床治疗方案,为临床决策提供 ...

  8. 中国机器视觉产业业发展战略研究及投资方向分析报告2022-2027年

    中国机器视觉产业业发展战略研究及投资方向分析报告2022-2027年   第1章:机器视觉行业概念界定及行业发展环境剖析1.1 机器视觉界定 1.1.1 机器视觉界定 1.1.2 机器视觉原理 1.1 ...

  9. 2022年版中国腰果酚市场趋势研究与竞争策略分析报告

    2022年版中国腰果酚市场趋势研究与竞争策略分析报告 ═━┈┈━══━┈┈━══━┈┈━══━ [出版机构]:  中商经济研究网 第一章 腰果酚概述 16  第一节 腰果酚定义 16  第二节 腰果酚 ...

  10. 问卷研究的五类分析思路模板

    问卷调查作为一种最常用的省时省力,能对事物进行比较全面系统的调查方法,无论是在日常工作还是学术研究中都倍受青睐.但一次问卷调查不是那么容易就可以完成的,随着问卷收集完毕,大量的数据等待着被整理.统计. ...

最新文章

  1. Python执行pyinstaller打包生成的exe文件实战
  2. html5应用测试方法,详解html5的video标签测试应用
  3. 深度探讨验证码发展史,账户中心安全科普文
  4. Linux-sudo详解
  5. javamail 解码 base64 html格式邮件_python使用QQ邮箱实现自动发送邮件
  6. openGauss索引详解
  7. 围绕HugeTLB的极致优化
  8. 第 2 章 类加载子系统
  9. Linux shell 字符串转数字进行运算符操作
  10. 研究员公开Razer 0day,插入鼠标即可获得Windows管理员权限
  11. java httpclient 下载文件_httpclient 上传文件、下载文件
  12. python自学网-python自学网
  13. 安装pd15提示“无法启动 Parallels Desktop,因为 Mac 的操作系统中缺少某些必需的组件”是怎么回事儿?
  14. 释放空间后将指针置空
  15. 一个免费提升独立站转化率神器-tidio实时在线客服聊天工具
  16. pkg学习--使用pkg打包应用
  17. RH8搭建静态网站——基于https协议的静态网站(综合练习)
  18. 期货市场亏了怎么自救?
  19. 迅雷服务器有多少硬盘,迅雷真的比BT还伤硬盘吗?
  20. sql中的类型转换---学习

热门文章

  1. css中overflow:hidden的属性 可能会导致js下拉菜单无法显示
  2. 使用OpenSSL实现证书操作
  3. 「JOI 2016 Final」断层
  4. 2018-2019-1 20189204《Linux内核原理与分析》第三周作业
  5. Swift_类型选择
  6. JSP 与 Servlet 的关系
  7. Please see the 'svn upgrade' command
  8. C++ 类型转换运算符
  9. App小样在手机运行了一下
  10. android调试——logcat详解