1.

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

写线程操作都遇到过这个错误。根本原因是view控件的线程安全问题,通俗点讲就是所有的更新UI操作都需要在主线程(也就是UI线程中完成),而不能在新开的子线程中操作。

基本思路:既然子线程需要更新UI,但子线程自身又不能完成任务,所以只能通过建立一个通信机制,当子线程需要更新UI时,发消息通知主线程并将更新UI的任务post给主线程,让主线程来完成分内的UI更新操作。这个机制是什么呢?就是Handler。Handler 从属于谁?当然是主线程。每个线程都有自己的handler,来处理自己的消息队列,只不过平时写单线程操作,系统会缺省调用一个handler,对开发者透明。当多线程操作需要线程间通信时,handler才会被程序猿们显示调用。

下面这两个例子是更新UI时主线程和子线程通信的例子,因为控件不是线程安全的,所以子线程中涉及到的更新UI操作全都写入runnable对象、通过主线程的handler来post给UI。

第一个例子,从网上找的,总结的比较到位。谢谢原作者的辛勤总结,转载地址标注于下。

原文转自 http://blog.csdn.net/djx123456/article/details/6325983  02580566

更多相关文章

  1. Android中常用的List滚动列表操作
  2. android中 layer-list和include的使用
  3. 关于 android 中 postDelayed方法的讲解
  4. Android(安卓)SQLite & Trigger
  5. Android之RxJava2
  6. Android(安卓)ContentProvider简介
  7. 刚学android,练手写的一个播放器
  8. [Android(安卓)Pro] service中显示一个dialog 或者通过windowman
  9. Android(安卓)如何对sqlite数据库进行增删改[insert、update和de

随机推荐

  1. java+空格怎么表示,我想实现一段Java字符
  2. HTML+CSS学习笔记 (6) - 开始学习CSS
  3. jQuery scale div内容(嵌套div)
  4. 第二个表格单元格未与顶部对齐
  5. PHP表单在Internet Explorer中不起作用
  6. html5 canvas绘制圆形印章,以及与页面交互
  7. 在CSDN下载资源,扣了积分,下载的是一个404
  8. 孩子放在父母的兄弟姐妹后面。
  9. HTML5 Web Sockets与代理服务器交互
  10. HTML/CSS: 标签CSS规则w/伪类呈现不一致