Android线程的数据通信

android——消息总线(Eventbus、FlowBus) Eventbus的使用例子 简介:Eventbus 主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 注意: 1、EventBus.getDefault().register(this); 放在初始化组件之前 (如: findViewById() ) ,一定放... 阅读详情

1 消息Message

  在android的多线程中,把需要传递的消息称为消息

 由于android的用户界面UI(user interface)是单线程的,所以如果UI花费太多的时间做后台的事情,超过5秒钟,Android就会给出错误提示。因此,为了避免”拖累“UI,一些费时的工作应该交给独立的后台线程去执行。,但是如果后台的线程直接执行UI对象,Android 会发出错误信息,所以UI线程和后台线程需要进行消息通信。UI线程将工作分配给后台线程。后台线程执行后将相应的消息返回给UI线程,让UI线程对UI完成相应地更新。

   Message是一个描述消息队列的数据结构,Message包含许多成员变量和方法。消息Message的常用方法如下表:

方法说明
Message()创建Message对象的构造方法
getTarget()获取将接受此消息的Handler对象,此对象必须实现Handler:handleMessage()方法
setTarget(Handler  target )设置接收此消息的Handler对象
sendToTarget()向Handler对象发送消息
int arg1用于当仅需要存储几个整型数据消息时
int arg2用于当仅需要存储几个整型数据消息时
int what用户自定义消息标识,避免各线程的消息冲突


2 消息处理工具Handler

  Handler 是Android 中多个线程间消息传递和定时执行任务的”工具“类。Handler是消息的处理者,负责在多个线程之间发送Message和处理Message.

Handler 在多线程中有两个方面的应用:

1)发送消息。在两个不同的线程之间传递数据,使用的方法为sendXXX()

2)定时执行任务。在指定的未来某时间执行某任务,使用方法为sendXXX()

一个线程只能有一个Handler对象,通过该对象向所在线程发送消息。Handler除了给其他线程发送消息外,还可以给本线程发送消息。

方法 说明
Handler()Handler对象的构造方法
handleMessage(Message msg) Handler的子类必须使用该方法接收消息
sendEmptyMessage(int) 发送一个空的消息
sendMessage(Message)发送消息,消息中可携带参数
sendMessageAtTime(Message,long) 在未来某一时间点发送消息
sendMessageDelayed(Message.long) 延时N毫秒发送消息
post(Runnable) 提交计划任务马上执行提交计划任务马上执行
postAtTime(Runable,long) 提交计划任务马上执行
postDelayed(Runable,long) 提交计划任务延时N毫秒执行
layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"/>
    <Button
        android:id="@+id/button01"
        android:layout_below="@id/text01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button 
        android:id="@+id/button02"
        android:layout_toRightOf="@id/button01"
        android:layout_alignTop="@id/button01"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView 
        android:id="@+id/text02"
        android:layout_below="@id/button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
        
</RelativeLayout>

Main_activity

package com.example.tread;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	TextView txt1,txt2;
	Button btn1,btn2;
	private boolean STOP=true;
	private int count=0;
	private mHandle handler;
	private mThread thread;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
        txt1=(TextView)findViewById(R.id.text01);
        txt2=(TextView)findViewById(R.id.text02);
        btn1=(Button)findViewById(R.id.button01);
        btn2=(Button)findViewById(R.id.button02);
        btn1.setOnClickListener(new click());
        btn2.setOnClickListener(new click());
        handler =new mHandle();
        thread =new mThread();
		
	}
	class click implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(v==btn1){//处理“启动线程按钮”
				//设置标志位
				STOP=false;
				//开启新线程
				thread.start();
			}else if(v==btn2){//处理“停止线程”按钮
				STOP=true;
			}
			
		}
		
	}
	
	//定义Thread子类,实现没个1秒钟发送一次消息的功能
	private class mThread extends Thread{
	  public void run(){
		
	    		while(!STOP)//一直循环直到为真
	    		{
	    			try {
	    				Thread.sleep(1000);//延时1秒
	    			}catch(InterruptedException e){
	    				e.printStackTrace();
	    			}
	    			Message msg=new Message();
	    			msg.arg1=1;//消息标志
	    			handler.sendMessage(msg);
	    		}
	    	}
	}
		
    //定义handler的子类接收和处理线程发送来的消息
	private class mHandle extends Handler{
    	public void handlerMessage(Message msg){
    		switch(msg.arg1)
    		{
    		case 1:
    		{
    			count++;
    			txt2.setText(Integer.toString(count));
    			break;
    		}
    		}
    	}
    }
    	 


}





C/C++ 计算程序运行的时间 C/C++计算程序执行时间的方法,精度依次增加,推荐度也依次增加 1.#include <time.h> clock_t start, finish; double process_interval ; start=clock(); process(); //要计时的程序 finish=clock(); process_interval =(double)(finish-star... 阅读详情

相关推荐

单细胞测序流程(五)t-sne聚类分析和寻找marker基因

系列文章目录 单细胞测序流程(一)简介与数据下载 单细胞测序流程(二)数据整理 单细胞测序流程(三)质控和数据过滤——Seurat包分析,小提琴图和基因离差散点图 单细胞测序流程(四)主成分分析——PCA 本期主讲内容——t-sne聚类分析和寻找marker基因 介绍:T-SNE是一种用于探索高维数据的非线性降维算法。它将多维数据映射到适合于人类观察的两个或多个维度。 一、课前准备 之前所使用的数据 R语言的IDE 二、过程 聚类分析的目的是根据细胞的差别所进行细胞分群,两个..

qq_45478665的博客 2万+

android 多线程间通信,android实现线程间通信的四种常见方式

1,通过Handler机制主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。 另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。private void one() {handler=new Handler(){@...

weixin_32526561的博客 2040

告别游戏卡关!用Cheat Engine 7.5修改单机游戏数据的保姆级教程(附Tutorial靶场练习)

本文提供了一份详细的Cheat Engine 7.5使用教程,帮助玩家轻松修改单机游戏数据。从基础操作到高级技巧,包括精确值扫描、模糊扫描、指针扫描和代码注入,教程还涵盖了《植物大战僵尸》和《星露谷物语》的实战案例,确保玩家能够安全、高效地优化游戏体验。

weixin_30082367的博客 784

Android 线程间通信

Android 线程间通信

QYgujingjing的专栏 2327

PLSQL Developer14连接Oracle详细过程

下载地址:Instant Client for Microsoft Windows (x64) 64-bit | Oracle 中国解压客户端工具到一个目录(解压文件到当前目录,自动合并成一个目录)​ 电脑(右键)→属性→高级系统设置→环境变量→系统环境变量→新建变量名:NLS_LANG 变量值: AMERICAN_AMERICA.ZHS16GBK​ 变量名:TNS_ADMIN 变量值:C:\xiaxinyu\software\Oracle\instantclient_19_10​ 在Oracle客户端(C

summer_fish的专栏 3983

2、Minikube安装Ingress

文章目录前言一、Ingress安装二、Ingress Demo1.创建一个pod和service2.部署ingress3.添加minikube域名映射三、遇到的坑 前言 上篇介绍了Minikube的安装,本篇介绍一下如何在Minikube中安装Ingress。 一、Ingress安装 Ingress安装很简单,Minikube里面带了Ingress附件。 安装Ingress minikube addons enable ingress 禁用Ingress minikube addons disa

star_apple的博客 3071

安卓两个线程传输数据依次进行_Android多线程之线程间通信

线程通信多个线程在处理同一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。就是多个线程在操作同一份数据时, 避免对同一共享变量的争夺。比如在两个并发的线程,线程A需要等线程B执行完得到的结果后,线程A才能拿这结果执行自己的任务,那么假如没有通信的话,两个并发的线程,我们就不能保证线程A能正确的执行任务,因为我们不能保证线程B一定是在线程A之前执行完(并发情况下)。所...

weixin_29847829的博客 433

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1071

Android基础学习之进程间和线程间通信方式总结

        首先介绍一下进程和线程的基本概念及两者之间的区别:   进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。   线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其...

Alexlee1986的专栏 4671

计算机组成原理(第三版)唐朔飞-第五章输入输出系统-课后习题

计算机组成原理(第三版)唐朔飞-第五章输入输出系统-课后习题

weixin_45735391的博客 6万+

20、机器人硬件改造与Geomagic Touch设备的运动学和动力学模型

本文详细介绍了机器人CRS 465和255的硬件改造过程,包括数字阶段、模拟阶段、功率阶段及软件实现,并深入研究了Geomagic Touch触觉设备的五自由度与三自由度运动学、微分运动学及动力学模型。文章还探讨了其在虚拟手术、装配等场景中的应用,提出了硬件与模型优化方向,如电源管理改进、信号处理优化、参数校准与自适应控制,并展望了多机器人协作、多传感器融合与智能控制算法的发展前景。

e4f5g6h7的博客 122

Android多线程通信

1 Android多线同Java差异 语法格式上来说并没有太多区别,区别在于Android存在UI线程(主线程)和非UI线程(子线程)。 UI线程:即程序主线程,主要负责处理UI相关的事件 Android线程之间存在区别的主要原因是:UI线程会被阻塞。当非常耗时的操作放在UI线程内会引起线程的阻塞。这是Android不允许的。Android3.0版本之后明确规定网络编程内容不允许放在UI线程内,否...

0110_ 640

使用node-red网关读取modbus设备点表,并上传到市政低碳平台来统计数据

最近做了一个物联网项目,具体是这样的,利用node-red网关盒子,来采集Modbus设备的点表,然后将数据转换,封装,最终上传到市政的低碳平台。上一步封装了点表的数据,调用低碳平台还需要账号密码,建筑id,这些都是固定信息,所以我们单独提出来。上一步获取到了原始的点表数据,下一步就是将这些点表数据与在低碳平台创建的采集的对应起来,并且设置好分类。读取modbus的节点,会有两个输出,我是使用的第一个输出。msg.meters 是一个数组,里面的每一个元素都是一个点表,比如厨房用水,园区照明,

知无涯 948

【Android】Android 线程&进程模型

文章目录1、Java线程1)线程与进程2)并发与并行3)线程同步4)线程状态5)Thread2、runOnUiThread3、AsyncTask4、Handler5、进程6、Binder 1、Java线程 在介绍Android的线程、进程模型之前,首先看一下Java线程相关的内容。 1)线程与进程 线程和进程是对操作系统中程序执行、资源分配的一种抽象,进程有独立的地址空间,线程附属于进程并共享进程...

Making Life Better. Making Others Better. 827

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android local socket,Android使用LocalSocket抓取数据

packagecom.snowice.local;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importandroid.app.Activity;importandroid.net.LocalServerSocket;importandroid.net.LocalSoc...

weixin_42300798的博客 383

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

安卓干货——经典蓝牙数据通信

1 前言 在之前的文章中我们已经实现了手机端与设备的连接过程。接下来将继续学习如何与设备进行数据收发。 2 通信线程ReadThread 经典蓝牙通信需要启动线程进行数据的读写,首先我们创建一个专门用于通信的线程ReadThread。ReadThread核心代码如下: private class ReadThread extends Thread { public void run() { Log.e("TAG", "开启通信线程"); by

tangjianing的博客 548

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android实现异步的方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33862041的博客 192

android封装aidl接口,Android远端接口AIDL及服务回调用法

在UI线程和Service线程中经常需要进行数据通信,而除了Bundles之外的另一种方法便为AIDL,Demo(Pedometer)步骤、逻辑及代码:首先先编辑好两个.aidl文件:IsStepService.aidl:importcom.jwetherell.pedometer.service.IStepServiceCallback;interface IStepService {boole...

weixin_32017501的博客 898

php攻城狮培养计划,Android攻城狮培养计划阶段三之Android数据通信开发与应用-2018...

Android攻城狮培养计划阶段三之Android数据通信开发与应用2018年M课网 高清视频 共5.62G10.png (144.62 KB, 下载次数: 9)2018-12-11 21:01 上传5 C. {: Sp% E2 y- Yk- e% A- ]〖课程介绍〗:+ w, |$ w! W! a6 W* o2 Q5 {/ t) R$ Z5 f〖课程目录〗:5 T1 d* C9 j- ...

weixin_28675839的博客 392

Android Service的解析

应用内或应用间数据通信,Android每个应用程序都在自己的dalvik虚拟机中运行,一个应用是不允许访问其他应用的内存信息的,为此Android引入了Content Provider在不同应用间共享数据,BroadcastReceiver广播信息给不同应用程序,但Content Provider更多用于数据的共享,BroadcastReceiver广播的信息会被所有应用接收较耗费系统资源,对于两个应用间动态的进行交互还需要通过Service来完成。如果设置为true,则能够被实例化,否则不能被实例化。

double222222的博客 1510

eventbus使用_Android EventBus框架的使用介绍

EventBus 是Android和Java数据通信的一个简捷框架,在Android中,主要用于线程直接的通信以及Activity,Fragment等之间的数据交互等官方介绍简化组件之间的通信,解耦事件发送方和接收方,可以很好地处理Activity、Fragment和后台线程直接的数据交互,避免复杂且容易出错的依赖项和生命周期问题使您的代码更简单更快捷小(60k 的jar包)被安装在十亿以上的应用...

weixin_39624705的博客 109

android线程间的通信机制

之前文章介绍了android进程间的通信方式大体有四种:Intent携带参数传递,broadcast,contentprovider和binder。具体可以参考之前问题。而在android中如果同一进程中,开启了不同的线程,那么这些线程之前和线程跟主线程之间是怎么通信的,这边问题就是来讲这个问题。 网上看到两篇详细介绍android线程的文章,讲的非常详细: 【Android开发】线程间通讯机

kuangminan的专栏 1177

android编程4 多线程编程

android编程4 多线程编程

qq_43667028的博客 149

Android蓝牙通讯

权限: //允许程序连接到已配对的蓝牙设备 &lt;uses-permission android:name="android.permission.BLUETOOTH" /&gt; //允许程序发现和配对蓝牙设备 &lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /&gt; 蓝牙适配器  //蓝牙...

a249130的博客 227

android.os.NetworkOnMainThreadException 异常处理

使用android4.4,在做一个网络下载时遇到这个问题,经过问了两位大神后发现是这个版本不支持在主线程中使用耗时的线程,比如这种下载,因为,系统会关闭在5秒内无反应的程序,所以就想了把这个操作放到子线程中,在android有个很好的Handler类为处理这个问题 NetworkThread.java类 public class NetworkThread implements Runnabl

~Hello,Wicky // 982

android 多线程 socket,android socket通信 创建线程接受 客户端

//声明量private String IPaddress="192.168.1.120";private int port =50003;private Handler mhandler =null;private String cc ="";private TextView returnvalue;//动态接收数据mhandler = new Handler(){p...

weixin_36482976的博客 275
上一篇: 2014年3月腾讯广研班笔试经验
下一篇: C++ new 和delete
yes1cpp
博客等级 码龄14年 15粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值