小白今天开始学   Handler  这个高大上的的东西了

顺便想复习一下多线程的知识,然后就顺便i写了一个按钮加显示的文本简单的Activity

package com.jiany.handler_test;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);}public void sendTheadCilck(View view){new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}textView.setText("android Thread");}}).start();}
}

Acitivity界面如下:(太丑了)

很高兴,点了一下按钮,静静的等待三秒。。。。

然后就。。。。

我就懵了。。。。。难道是我的姿势不对????

然后直接查看了Android studio 的log

 FATAL EXCEPTION: Thread-143Process: com.jiany.handler_test, PID: 24714android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:824)at android.view.View.requestLayout(View.java:16431)at android.view.View.requestLayout(View.java:16431)at android.view.View.requestLayout(View.java:16431)at android.view.View.requestLayout(View.java:16431)at android.view.View.requestLayout(View.java:16431)at android.view.View.requestLayout(View.java:16431)at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352)at android.view.View.requestLayout(View.java:16431)at android.widget.TextView.checkForRelayout(TextView.java:6600)at android.widget.TextView.setText(TextView.java:3813)at android.widget.TextView.setText(TextView.java:3671)at android.widget.TextView.setText(TextView.java:3646)at com.jiany.handler_test.MainActivity$1.run(MainActivity.java:30)at java.lang.Thread.run(Thread.java:841)

报了线程的错误:Only the original thread that created a view hierarchy can touch its views.  (我的理解就是:只有Ui线程才能访问Ui组件)

脑子duang了一下,想有没有的一个东西能把子线程的东西弄到Ui线程去呢。。。。

所以今天学的  Handler   派上用场了

修改代码如下:

package com.jiany.handler_test;import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);}private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);while (msg.what ==100){textView.setText("android Thread");break;}}};public void sendTheadCilck(View view){new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}handler.sendEmptyMessage(100);}}).start();}
}

加入了一个信息接收器Handler(乱叫的)  Handler可以是实现 子线程与Ui线程的通信。

通俗来说就是子线程发生一个信息来告知Ui线程要执行什么操作,这个信息不能直接告知,要通过一个Handler接受才能告知子线程

最后成功运行

Android 初步 Handler------线程之间通信利器相关推荐

  1. (转载) Android两个子线程之间通信

    Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为 ...

  2. Android两个子线程之间通信

    Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信 ...

  3. 线程之间通信 等待(wait)和通知(notify)

    线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同 ...

  4. Java 线程之间通信

    目录 概念 原理 实现 1. 第一种解法,包含多种小的不同实现方式,但一个共同点就是靠一个共享变量来做控制: a. 利用最基本的synchronized.notify.wait: b. 利用Lock和 ...

  5. Java线程之间通信

    用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...

  6. linux线程同步 eventfd,用 eventfd 在线程之间通信

    最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件.后面两样都可以用 socket. 当然同主机进程也可以用别的,先不想那么多.我要说的线程之间,要实现和 socket 统一 ...

  7. Handler线程间通信

    异步更新之Handler.post解惑 在Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进 ...

  8. android初步ui线程案例,android – 它是一个bug还是一个功能?在某些情况下,可以从未在UI线程上运行的任务访问UI线程...

    developer.android.com说: Only objects running on the UI thread have access to other objects on that t ...

  9. java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...

    [单选题]肥胖是体内中性脂肪过多积聚的表现,超过标准体重多少者为肥胖 A. 超过标准体重10%以上 B. 超过标准体重15%以上 C. 超过标准体重20%以上 D. 超过标准体重25%以上 E. 超过 ...

最新文章

  1. Microbiome: 16S rRNA基因拷贝数应该被校正吗?
  2. 用脚本实现“修复连接”的功能
  3. java异常处理试题答案_JAVA异常处理试题及答案
  4. Android开发之实现锁屏功能
  5. centos在线安装mysql
  6. HTG Explains: Why Linux Doesn’t Need Defragmenting
  7. php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传
  8. 《分拣机械臂测试》- 端拾器最大吸力测试
  9. 设计模式之单实例模式(Singleton)
  10. 陕西省ti杯竞赛题目_西安科技大学高新学院在陕西省第六届TI杯竞赛中喜获佳绩...
  11. eclipse导入jsp项目
  12. css黄金色渐变值,金色的rgb值是多少
  13. Spring boot 2 雷神
  14. 微信小程序扫描二维码或者条码
  15. 简智音科技:抖音与快手相比,谁的前景更好?
  16. python输入end退出循环_python练习:从入门到实践——用户输入和while循环
  17. 手机app客户端软件制作成本
  18. 数据分析的统计基础(下)
  19. [HNOI 2014] 米特运输
  20. Windows CE嵌入式系统程序开发

热门文章

  1. 迪文DGUS屏通过单片机转发与欧姆龙PLC(hostlink mode-c协议)实现通讯
  2. 整理了一些上课学dw的笔记
  3. 使用uni-app的uni.uploadFile()上传遇到的问题
  4. 仿个人税务 app html5_警惕假个税APP蹭热点 税务总局提醒别在非正规渠道下载
  5. 数据分析和Excel:有关数据分析和Excel的简单介绍
  6. css使用伪类添加蒙版
  7. 【北京-知春路】这10家公司值得你加入
  8. oracle12c的show指令,Oracle 12c sqlplus 命令 --- show 说明
  9. 基于51单片机的电子秒表设计
  10. oracle认证之OCI认证(含1z0-1072-21题库)