对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线程处理的更多相关文章

  1. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  2. Android线程管理之Thread使用总结

    前言 最近在一直准备总结一下Android上的线程管理,今天先来总结一下Thread使用. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Executo ...

  3. Android线程管理之ExecutorService线程池

    前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...

  4. Android线程管理之ThreadPoolExecutor自定义线程池

    前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...

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

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

  6. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  7. Android线程管理(三)——Thread类的内部原理、休眠及唤醒

    线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...

  8. Android线程管理(二)——ActivityThread

    线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...

  9. android 线程学习

    很多人觉得线程难理解,主要有两个问题: 线程休眠,既然线程已经休眠了,程序的运行速度还能提高吗? 线程体一般都进行死循环,既然线程死循环,程序就应该死掉了,就会没有反应. 1.关于线程休眠问题 对线程 ...

  10. Android 线程模型

    Android 线程模型 1. import android.os.Handler;  import android.os.Message; public class MainActivity ext ...

随机推荐

  1. .net之微信企业号开发(一) 所使用的环境与工具以及准备工作

    前言 一直以来,从事的是.net winform的编程,虽然对移动互联这块很感兴趣,但是由于现有的工作和移动互联之间隔的太远,也就没有时间和精力好好的去研究和实现.今年年初辞职了,刚好朋友那里希望建立 ...

  2. Amazon的推荐系统

    本文引自http://blog.csdn.net/fwing/article/details/4942886 现在的推荐系统特别火啊.做得最好的应该是Amazon了. 上面是Amazon的图书推荐. ...

  3. *关于httl开源Java模板的使用心得

    1.简介 HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似. ...

  4. Oracle Created (Default) Database Users

    http://www.idevelopment.info/data/Oracle/DBA_tips/Database_Administration/DBA_26.shtml DBA Tips Arch ...

  5. idlcpp 功能改进

    最近没有续写 idlcpp 的教程, 因为忙着对它进行大幅度的修改. 一开始本是计划用idlcpp对付新写的代码,让这些新写的代码能够很容易提供给脚本使用.后来又希望能将大量现存的代码移植过来,毕竟有 ...

  6. Linux + Mono 目前已经支持Entity Framework 6.1

    在上个随笔 CentOS上 Mono3.2.8运行ASP.NET MVC4经验中,步骤2中要求卸载EF 5.0,这样才能在Linux + Mono的环境中运行ASP.NET MVC4的Web应用.今天 ...

  7. NoSQL学习二:MongoDB基本管理命令

    MongoDB命令学习  一.MongoDB命令帮助 在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控: 这是MongoDB最上层 ...

  8. 一用钟情的VS插件系列总目录(值得收藏)

    关于插件,大家的印象可能很多,比如开发者经常使用的Chrome浏览器的扩展程序,某个软件的一个扩展程序等等.我们使用插件的目的是为了提高我们的某些方面的工作效率或者让我们的软件源(Chrome浏览器等 ...

  9. ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)

    ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...

  10. 从3D Touch 看 原生快速开发

    全新的按压方式苹果继续为我们带来革命性的交互:Peek和Pop,Peek 和 Pop 让你能够预览所有类型的内容,甚至可对内容进行操作,却不必真的打开它们.例如,轻按屏幕,可用 Peek 预览收件箱中 ...