Android线程处理
对JAVA的线程相信大家都有一定的认识,本篇就让我们一起探讨一下Android中的线程问题,对于线程和进程的区别我就不再赘述,有兴趣的小童鞋可以百度一下,讲解的非常详细,相信大家经常可以听到关于线程的东西。下面我们就一起来学习一下吧。
为什么要了解Android的线程机制呢?因为谷歌为了提高Android安全些,要求Android4.0以后的版本,需要网络访问时,要声明一下。我们都知道网络访问是个费时的操作,所以我们需要把网络访问添加到子线程处理,然后把子线程的数据传到主线程进行显示。
下面我以一个简单的例子为大家介绍一下为什么子线程不能进行视图的更新:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView) findViewById(R.id.textview); /*
* 子线程不能进行视图的更新
*/
new Thread(new Runnable() { @Override
public void run() {
try {
Thread.sleep(1000);//模拟网络加载
} catch (InterruptedException e) {
e.printStackTrace();
}
textview.setText("更新视图");
}
}).start();
}
这样操作就会导致系统强退:

Locat打印的错误日志:

出现这个错误的原因就是因为子线程不能进行UI界面的更新,UI界面的更新必须在主线程中进行,所以这就要说的是如何从子线程回到主线程呢?方法其实很简单,下面我们就一起看两种方式,完成上面的UI界面更新。
方法一:通过runOnUiThread(new Runnable(){});实现:
//更新视图方法一:
new Thread(new Runnable() { @Override
public void run() {
try {
Thread.sleep(1000);//模拟网络加载
} catch (InterruptedException e) {
e.printStackTrace();
}
//返回主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
textview.setText("更新视图方法一");
}
});
}
}).start();
这样我们的UI界面就完成了更新。
方法二:通过Handler类来实现:
首先我们需要创建一个Handler对象,通过这个对象来进行UI界面的更新。
//创建Handler对象
private Handler handler = new Handler();
//更新视图方法二:
new Thread(new Runnable() { @Override
public void run() {
try {
Thread.sleep(3000);//模拟网络加载
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() { @Override
public void run() {
textview.setText("更新视图方法二");
}
});
}
}).start();
这两中方法都十分的强大,我个人比较喜欢第一种方法,不过通过Handler进行UI界面的更新十分的强大,在随后的几篇总结中,我将为大家介绍Handler在处理线程问题时的方法与强大。如果你对此感兴趣可以持续关注更新。
Android线程处理的更多相关文章
- Android线程管理之ThreadLocal理解及应用场景
前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...
- Android线程管理之Thread使用总结
前言 最近在一直准备总结一下Android上的线程管理,今天先来总结一下Thread使用. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Executo ...
- Android线程管理之ExecutorService线程池
前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...
- Android线程管理之ThreadPoolExecutor自定义线程池
前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...
- Android线程管理之AsyncTask异步任务
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
- Android线程之主线程向子线程发送消息
和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...
- Android线程管理(三)——Thread类的内部原理、休眠及唤醒
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- Android线程管理(二)——ActivityThread
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- android 线程学习
很多人觉得线程难理解,主要有两个问题: 线程休眠,既然线程已经休眠了,程序的运行速度还能提高吗? 线程体一般都进行死循环,既然线程死循环,程序就应该死掉了,就会没有反应. 1.关于线程休眠问题 对线程 ...
- Android 线程模型
Android 线程模型 1. import android.os.Handler; import android.os.Message; public class MainActivity ext ...
随机推荐
- 使用Axure来仿真Vogue网站
用户体验包括三部分:用户研究.视觉设计和交互设计.按顺序进行,在用户研究和视觉设计之后,开始交互设计,Axure是最好的交互设计的软件. Vogue是著名的奢侈品品牌,网站设计“高大上”,用Axure ...
- 6.用CXF编写基于Spring的WebService
首先是服务器端: //实体类 public class Weather { private String region;//区域编码 private String regionName;//区域名称 ...
- 关于STM32-MDK中preprocessor symbols解释
preprocessor symbols 是预处理符号的意思,这里相当于宏定义,我们在使用STM32固件库时,由于固件库里面包含的是ST整个系列单片机的定义,如下图 这时在define框中可以作为一个 ...
- 黑马程序员+SQL基础(下)
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net ...
- android handler 简介
android的handler 是一个神奇东西,处理异步消息的时候,我们离不开他.那么他的具体的介绍是什么了? Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息 ...
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天、控制更多相关细节
在广域网中,由于网络的结构纷繁复杂.而且其实时状况又是千变万化的,所以,要使广域网中的视频聊天达到一个令人满意的效果,存在诸多挑战.这次发布的GG 3.7版本尝试在这一方向上做一些努力,据我自己测试, ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)
距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...
- prerender-SPA程序的SEO优化策略
随着web2.0的兴起,ajax的时代已经成为了事实,更如今Knockout,backbone, angular,ember前端MDV(model driver view)框架强势而来,Single ...
- django开发个人简易Blog——构建项目结构
开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. a ...