创建子线程创建子线程

更多关于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主线程与子线程的更多相关文章

  1. android 主线程和子线程之间的消息传递

    从主线程发送消息到子线程(准确地说应该是非UI线程)  package com.zhuozhuo; import android.app.Activity; import android.os.Bun ...

  2. Android 主线程和子线程通信问题

        Android 如今不支持View在子线程中创建及调用其方法.假设要实现子线程内容更新之后.将结果及时反馈到主线程中,该怎样出来呢?     能够在主线程中创建Handler来实现. 这样子线 ...

  3. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  4. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

    keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...

  5. Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  6. Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解

    MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...

  7. Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息

    MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...

  8. (转)C#/.NET主线程与子线程之间的关系

    一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程.       有的博客上说“至少一个主线程”,这一说法持有怀疑         主线程与子线程之间的关系        ...

  9. C#主线程等待子线程运行结束

    佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...

  10. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

随机推荐

  1. Java灵魂拷问13个为什么,你都会哪些?

    大家好,我是 V 哥.今天看了阿里云开发者社区关于 Java 的灵魂拷问,一线大厂在用 Java 时,都会考虑哪些问题呢,对于工作多年,又没有大厂经历的小伙伴不妨看看,V 哥总结的这13个为什么,你都 ...

  2. IDEA方法模板、类模板设置记录

    类模板 设置入口 Mac:common+,进入设置->Editor->File and Code Templates->Includes 模版代码 /** * todo * * @a ...

  3. 解决MindSpore-2.4-GPU版本的安装问题

    问题背景 虽说在MindSpore-2.3之后的版本中不在正式的发行版中支持GPU硬件后端,但其实在开发分支版本中对GPU后端是有支持的: 但是在安装的过程中可能会遇到一些问题或者报错,这里复现一下我 ...

  4. 2024 BUPT Programming Contest F

    简要题意 多测,给定一个 \(n \times n\) 矩阵,矩阵中的每一个元素的计算方式如下: 矩阵的行和列唯一决定两个整数对 \((a, b)\),矩阵第 \(a(0 \le a < n)\ ...

  5. VS中使用Qt方法详解

    相信大家都知道在 Qt Creator 中可以使用 MSVC 编译工具对 Qt 项目进行编译.若有人比较习惯于使用 Visual Studio,或某些项目必须使用 Visual Studio,也可以在 ...

  6. Redis未授权漏洞复现

    目录 Redis 漏洞的产生条件及利用 Redis环境搭建 漏洞复现 利用Redis写入Webshell 利用Redis写入SSH公钥 利用Redis写入计划任务 Redis安全防护 Redis re ...

  7. BI系统汇总

    datart datart (数艺)是面向业务人员.数据工程师.数据分析师.数据科学家,致力于提供一站式数据可视化解决方案.既可以作为公 有云 / 私有云部署使用,也可作为可视化插件集成到三方系统.用 ...

  8. 服务器安全之DenyHosts

    情景:今天登录服务器,突然发现登录之后展示的信息有点多,仔细端倪发现: There were 3975 failed login attempts since the last successful ...

  9. git代码同步,代码同步到码云中

    首先在需要同步的代码根目录下打开终端,这里是在vscode的终端操作的,也可以用cmd 进入到项目目录,输入git status查看代码同步状态, 提示内红色的都是有变化的代码 git status ...

  10. Ubuntu22.04安装cuda12.1+cudnn8.9.2+TensorRT8.6.1+pytorch2.3.0+opencv_cuda4.9+onnxruntime-gpu1.18

    说来话长,我想配一个一劳永逸的环境,方便以后复用.省的以后反复查教程重新装了 1. 安装miniconda+py3.10 cd /root wget -q https://repo.anaconda. ...