android主线程与子线程
创建子线程创建子线程
更多关于java线程的文章可以查看这两篇
线程1
创建线程的方法
在android中穿件子线程的方案很简单
创建子线程的几种方法
///////第一种///////
class Threadone extends Thread{
@Override
public void run() {} //重写run方法,这个方法就是子线程一旦启用就会执行的方法
}
new Threadone().start() //启动子线程
///////////第二种方式///////////
new Thread(){
@Override
public void run() {}
}.start()
解决子线程调用ui问题
在子线程中是无法调用ui
那么我们就绪要借助
runOnUiThread来操控主线程
如
runOnUiThread(()->{Toast.makeText(MAIN.this, "", Toast.LENGTH_SHORT).show();});
这样就可以在子线程里面调用了
但是这样还是有局限
例如我们无法向主线程传入子线程产生的变量
如图 如果我们想传递一个变量进去的话他就会提示我们必须用final来修饰 那么我们是无法传递变量的

这个时候我们就需要一个中间人来帮我们想主线程传递这个变量了
Handler对象传递消息
我们创建一个Handler的子类并重写handleMessage方法
这里先介绍一下消息对象 Message message = new Message();
这个message对象其实就是我们向主线程传递变量的载体
message.what = 1234
what属性是个int值 我们可以随便输入 这个值其实就是相当于message的身份或者说是id 因为如果有很多线程向主线程传递消息的时候 我们需要区分每个message的传入身份
message.obj = 任何对象
这个属性就是我们要传递的消息,他是Object类型所以等号的右边可以传入任何对象 String Intger 或者自定义的类对象都可以
Hundler的实例.sendMessage(message);发送消息到Handler的实例里面
那么什么是Hundler
个人理解修饰当Handler被实例化以后,主线程就会无时无刻监听这个对象,一旦有消息传来,就会被主线程调用,达到子线程间接操控主线程的作用或者向主线程传递消息的作用
下面看看代码
在子线程创建message
//创建一个消息对象来和主线程之间传递消息,因为主线程和子线程之间是无法直接通信的
Message message = new Message();
//what是个int数据,这个数字表明我们message对象的编号相当于身份信息
message.what = 0;
//obj就是我们要想主线程要传递的消息,他的类型为object类型,所以我们可以传递任意的对象过去,然后再强转回来
message.obj = resmessage;
//用Hundler对象来发送消息
myhundler.sendMessage(message);
创建喊Handler对象
private Handler myhundler = new Handler(Looper.myLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
//认证消息身份
if (msg.what == 1234) { //因为是object类型所以需要强转为Sstring
Toast.makeText(uiMainActivity.this, (String) msg.obj, Toast.LENGTH_SHORT).show();
}
}
};
android主线程与子线程的更多相关文章
- android 主线程和子线程之间的消息传递
从主线程发送消息到子线程(准确地说应该是非UI线程) package com.zhuozhuo; import android.app.Activity; import android.os.Bun ...
- Android 主线程和子线程通信问题
Android 如今不支持View在子线程中创建及调用其方法.假设要实现子线程内容更新之后.将结果及时反馈到主线程中,该怎样出来呢? 能够在主线程中创建Handler来实现. 这样子线 ...
- Android线程之主线程向子线程发送消息
和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...
- Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息
之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...
- Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息
MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...
- (转)C#/.NET主线程与子线程之间的关系
一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程. 有的博客上说“至少一个主线程”,这一说法持有怀疑 主线程与子线程之间的关系 ...
- C#主线程等待子线程运行结束
佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...
- Java主线程等待子线程、线程池
public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...
随机推荐
- 查看一个package是否在执行
select a.type, a.owner, b.SID, b.SERIAL#, b.OSUSER, b.MACHINE, b.PROGRAM, b.MODULE, b.ACTION From db ...
- 基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
前言 今天大姚给大家分享一个基于C#开源.功能强大.灵活的跨平台开发框架:Uno Platform.通过 Uno Platform,开发者可以利用单一代码库实现多平台兼容,极大地提高了开发效率和代码复 ...
- CommonsBeanUtils1(基于ysoserial)
环境准备 JDK1.8(8u421) JDK8的版本应该都没什么影响,这里直接以我的镜像为准了.commons-beanutils:commons-beanutils:1.9.2.commons-co ...
- 2025年前端面试准备js篇
1.js的基本数据类型有哪些 undefined,null,bo0lean,number,string,object,Symbol,bigInt 分为原始类型和引用类型 原始类型:undefined, ...
- 如何快速构建基于Spring4.0的Rest API(攻略)
本文由 ImportNew - 邬柏 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Ja ...
- golang之copier
今天我们要介绍的copier库就能处理不同类型之间的赋值.除此之外,copier还能: 调用同名方法为字段赋值: 以源对象字段为参数调用目标对象的方法,从而为目标对象赋值(当然也可以做其它的任何事情) ...
- vue中使用百度地图
vue-cli创建的项目中使用百度地图,样式如下: 根据后台返回的不同的信息,展示不同的标记以及对应的标记信息,点击鼠标后展示弹窗 首先,引入vue-baidu-map,以展示地图,对应的命令是 np ...
- mysql之编译安装
在CentOS7中编译安装MySQL 5.7.29 一.依赖包安装 yum install gcc gcc-c++ ncurses ncurses-devel cmake bison -y 二.下载源 ...
- 基于docker的常用服务搭建
使用docker搭建相关服务: 1. MySQL服务 1) 拉取镜像 docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mys ...
- 专为移动端设计的PDF阅读器-小白PDF阅读器
以前在手机端看扫描版的pdf电子书,要么放大后用手指来回拖动着看,要么将手机横屏看,阅读体验非常差!后来就想自己做一款能自动重排版的pdf阅读器,于是小白PDF阅读器就诞生了! 小白PDF阅读器的重排 ...