1、用好 AsyncTask

一个优秀的android app,肯定少不了一个很好的用户体验,除了界面等外,流畅的交互,快速响应的速度都是至关重要,若

是加载一个数据,都得等上几秒钟,怕是app卸载率就得提高了,android程序在启动的时候,会单独启动一个进程,默认情况下所

有的程序都在这个进程中进行,也就是说一个android程序默认情况下只有一个进程,但是一个进程可以有多个线程。

在这些线程中,有一个线程叫做UI线程,也叫做Main Thread,除了Main Thread之外的线程都可称为Worker Thread。Main Thread主要负责控制UI页面的显示、更新、交互等。 因此所有在UI线程中的操作要求越短越好,只有这样用户才会觉得操作比较流畅。一个比较好的做法是把一些比较耗时的操作,例如网络请求、数据库操作、 复杂计算等逻辑都封装到单独的线程,这样就可以避免阻塞主线程。

比如如下实现方式:

mTextView = (TextView)findViewById(R.id.text_id);

		new Thread(new Runnable() {

			@Override
public void run() {
// TODO Auto-generated method stub
HttpGet get = new HttpGet("https://www.baidu.com");
HttpClient clent = new DefaultHttpClient();
try {
HttpResponse reponse = clent.execute(get);
if(reponse.getStatusLine().getStatusCode() == 200){
mTextView.setText("请求正常");
}else{
mTextView.setText("请求异常");
} } catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}).start();

运行后必然报错,如下

06-08 16:42:15.133: E/AndroidRuntime(1281): FATAL EXCEPTION: Thread-10506
06-08 16:42:15.133: E/AndroidRuntime(1281): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5380)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1016)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4305)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.view.View.invalidate(View.java:10558)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.view.View.invalidate(View.java:10507)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.widget.TextView.checkForRelayout(TextView.java:6561)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.widget.TextView.setText(TextView.java:3733)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.widget.TextView.setText(TextView.java:3591)
06-08 16:42:15.133: E/AndroidRuntime(1281): at android.widget.TextView.setText(TextView.java:3566)

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈

当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

android中常用的优秀功能 (AsyncTask)的更多相关文章

  1. Android中常用的优秀开源框架

    Android开源框架库分类,挑选出最常用,最实用的开源项目,本篇主要介绍的是优秀开源框架库和项目,UI个性化控件会独立介绍.UI个性化控件 Index Dependency Injections A ...

  2. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  3. Android中常用控件及属性

    在之前的博客为大家带来了很多关于Android和jsp的介绍,本篇将为大家带来,关于Andriod中常用控件及属性的使用方法,目的方便大家遗忘时,及时复习参考.好了废话不多讲,现在开始我们本篇内容的介 ...

  4. Android中使用Thread线程与AsyncTask异步任务的区别

    最近和几个朋友交流Android开发中的网络下载问题时,谈到了用Thread开启下载线程时会产生的Bug,其实直接用子线程开启下载任务的确是很Low的做法,那么原因究竟如何,而比较高大上的做法是怎样? ...

  5. Android中常用布局单位

    Android在UI布局时经常用到一些单位,对单位混用直接会影响UI的显示,要想正确的在布局中使用每种单位就必须先真正的熟悉它. UI显示效果的影响因素:屏幕尺寸.屏幕密度.分辨率:而android手 ...

  6. android中常用的布局管理器

    Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout    相对布局管理器 LinearLayout     线性布局管理器 FrameLayout     ...

  7. Android中常用的布局

    一般分为5大类. Android中所有的空间第一字母都是大写 1.线性布局 LinearLayout 2.相对布局 RelativeLayout 3.帧布局--分层显示  FrameLayout 4. ...

  8. android中常用的弹出提示框

    转自:http://blog.csdn.net/centralperk/article/details/7493731 我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的 ...

  9. JAVA、android中常用的一些jar包的作用

    正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进 ...

随机推荐

  1. 【转载】Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  2. kernel(二)源码浅析

    目录 kernel(二)源码浅析 建立工程 启动简析 head.s 入口点 查询处理器 查询机器ID 启动MMU 其他操作 start_kernel 处理命令行 分区 title: kernel(二) ...

  3. 字符设备驱动(六)按键poll机制

    title: 字符设备驱动(六)按键poll机制 tags: linux date: 2018-11-23 18:57:40 toc: true --- 字符设备驱动(六)按键poll机制 引入 在字 ...

  4. C++ 文件保存

      文件保存: #include <sstream>#include <fstream>using namespace std; /*save to path ./record ...

  5. 网络编程基础【day10】:多线程效果演示(二)

    本节内容 1.引子 2.并发多线程效果演示 一.引子 我们说单核的cpu只能同时执行一个任务,但是给我们的一个幻觉是可以执行多个,因为cpu太快了.它是怎么实现的呢?就是上下文切换,它不是轮询着切换的 ...

  6. Hadoop记录-Hadoop集群添加节点和删除节点

    1.添加节点 A:新节点中添加账户,设置无密码登陆 B:Name节点中设置到新节点的无密码登陆 C:在Name节点slaves文件中添加新节点 D:在所有节点/etc/hosts文件中增加新节点(所有 ...

  7. PHP中的表单传值

     前言:试想一下如果PHP没有了表单传值,那么就相当于一个没有表达能力的人,因此表单传值在php中是相当重要的,但是不难,接下来我们一起来探讨一下吧------> (一)什么是表单传值 概念:表 ...

  8. 【leetcode-75】 颜色分类

    (1过,解法不好,看參考荷兰国旗问题解法) 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0 ...

  9. PHP7 学习笔记(十四)Reids 键空间通知配合TP5 实现分布式延时任务

    测试环境:windows 10 + phpStudy 配置redis配置文件 redis.windows.conf notify-keyspace-events "Ex" 重启re ...

  10. ArcGis 拓扑检查——狭长角锐角代码C#

    中学的时候醉心于研究怎么“逃课”,大学的时候豁然开悟——最牛逼的逃课是准时准地儿去上每一课,却不知到老师讲的啥,“大隐隐于市”大概就是这境界吧. 用到才听说有“余弦定理”这么一个东西,遂感叹“白上了大 ...