Android 初步 Handler------线程之间通信利器
小白今天开始学 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------线程之间通信利器相关推荐
- (转载) Android两个子线程之间通信
Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报 分类: 个人杂谈 版权声明:本文为 ...
- Android两个子线程之间通信
Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信 ...
- 线程之间通信 等待(wait)和通知(notify)
线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同 ...
- Java 线程之间通信
目录 概念 原理 实现 1. 第一种解法,包含多种小的不同实现方式,但一个共同点就是靠一个共享变量来做控制: a. 利用最基本的synchronized.notify.wait: b. 利用Lock和 ...
- Java线程之间通信
用多线程的目的:更好的利用CPU的资源.因为所有的多线程代码都可以用单线程来实现. 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程. 并行:多个CPU实例或者多台机器同时执行一段处理逻辑, ...
- linux线程同步 eventfd,用 eventfd 在线程之间通信
最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件.后面两样都可以用 socket. 当然同主机进程也可以用别的,先不想那么多.我要说的线程之间,要实现和 socket 统一 ...
- Handler线程间通信
异步更新之Handler.post解惑 在Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进 ...
- android初步ui线程案例,android – 它是一个bug还是一个功能?在某些情况下,可以从未在UI线程上运行的任务访问UI线程...
developer.android.com说: Only objects running on the UI thread have access to other objects on that t ...
- java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...
[单选题]肥胖是体内中性脂肪过多积聚的表现,超过标准体重多少者为肥胖 A. 超过标准体重10%以上 B. 超过标准体重15%以上 C. 超过标准体重20%以上 D. 超过标准体重25%以上 E. 超过 ...
最新文章
- Microbiome: 16S rRNA基因拷贝数应该被校正吗?
- 用脚本实现“修复连接”的功能
- java异常处理试题答案_JAVA异常处理试题及答案
- Android开发之实现锁屏功能
- centos在线安装mysql
- HTG Explains: Why Linux Doesn’t Need Defragmenting
- php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传
- 《分拣机械臂测试》- 端拾器最大吸力测试
- 设计模式之单实例模式(Singleton)
- 陕西省ti杯竞赛题目_西安科技大学高新学院在陕西省第六届TI杯竞赛中喜获佳绩...
- eclipse导入jsp项目
- css黄金色渐变值,金色的rgb值是多少
- Spring boot 2 雷神
- 微信小程序扫描二维码或者条码
- 简智音科技:抖音与快手相比,谁的前景更好?
- python输入end退出循环_python练习:从入门到实践——用户输入和while循环
- 手机app客户端软件制作成本
- 数据分析的统计基础(下)
- [HNOI 2014] 米特运输
- Windows CE嵌入式系统程序开发
热门文章
- 迪文DGUS屏通过单片机转发与欧姆龙PLC(hostlink mode-c协议)实现通讯
- 整理了一些上课学dw的笔记
- 使用uni-app的uni.uploadFile()上传遇到的问题
- 仿个人税务 app html5_警惕假个税APP蹭热点 税务总局提醒别在非正规渠道下载
- 数据分析和Excel:有关数据分析和Excel的简单介绍
- css使用伪类添加蒙版
- 【北京-知春路】这10家公司值得你加入
- oracle12c的show指令,Oracle 12c sqlplus 命令 --- show 说明
- 基于51单片机的电子秒表设计
- oracle认证之OCI认证(含1z0-1072-21题库)