首页 > 其他分享 >android主线程与子线程

android主线程与子线程

时间:2024-06-09 22:34:33浏览次数:26  
标签:对象 主线 传递 Handler 线程 android message 程与子

创建子线程创建子线程

在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来修饰 那么我们是无法传递变量的
image

这个时候我们就需要一个中间人来帮我们想主线程传递这个变量了



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();
            }
        }
    };

标签:对象,主线,传递,Handler,线程,android,message,程与子
From: https://www.cnblogs.com/wssw/p/18240160

相关文章

  • python 字典是不是线程安全的
    Python字典(dict)对象本身不是线程安全的。在多线程环境下,对同一个字典对象的读写操作需要额外的同步机制来确保线程安全性。如果需要在多线程环境下使用线程安全的字典,可以使用collections.Counter对象,它是线程安全的,或者使用threading.local,它提供了线程局部存储的功能。另外......
  • 线程池的实现代码分析
    [toc]线程池线程池代码分析thread_pool.c#include"thread_pool.h"voidhandler(void*arg){ printf("[%u]isended.\n", (unsigned)pthread_self()); //打印自己的进程号 pthread_mutex_unlock((pthread_mutex_t*)arg); //解锁}//线程要执行的任......
  • Android大作业 - 瑞德记账app - 演示视频
    韩婴在《韩诗外传》有言:“家有千金之玉不知治,犹之贫也。”如果不知道如何管理和利用所拥有的丰富资源,依然会陷入贫困的境地。在当今社会,记账app对于个人财务管理有着重大意义。首先,它可以帮助用户建立并保持清晰的财务记录。通过记录每笔支出和收入,用户可以清楚地了解自己的财......
  • Android 13.0 Launcher3单层模式workspace中app列表页排序功能实现
    1.概述在13.0的定制化开发中,对于Launcher3的功能定制也是好多的,而对于单层app列表页来说排序功能的开发,也是常有的功能这就需要了解加载app数据的流程,然后根据需要进行排序就可以了,接下来就来实现这个功能如图:2.Launcher3单层模式workspace中app列表页排序功能实现的核心......
  • python 多任务之多线程
    多线程线程是程序执行的最小单位,实际上进程只负责分配资源,而利用这些资源执行程序的是线程,也就是说进程是线程的容器,一个进程中最少有一个线程来负责执行程序,它可以与同属一个进程的其它线程共享进程所拥有的全部资源 为什么要选择线程,而不选择进程进程:就像同时和两个人......
  • Qt 子线程调用connect/QMetaObject::invokeMethod 不调用槽函数问题
    在使用invokeMethod进行跨线程调用的时候,发现invokeMethod在某些情况下不能正常调用.经过查各种资料发现invokeMethod底层的调用逻辑是通过Qt事件循环处理,所以子线程需要显示的调用QEventLoop::exec()或者QCoreApplication::processEvents()执行信号槽处理.首先有一个QDemoObje......
  • Android 系统架构 详解(原理和四个层次以及启动流程)
    Android系统架构详解(原理和四个层次以及启动流程)Android系统架构是指Android操作系统的整体结构和组织方式,包括不同层次的软件组件和其相互之间的关系,Android系统架构是一个分层的体系结构,它包括多个层次,每个层次都有特定的功能和责任。一、背景Android系统架构......
  • 使用maven搭建父工程与子工程
    父/子工程的作用:1.依赖管理2.配置信息共享3.模块化4.版本控制5.提高重用性可维护性 什么是dependencyManagement:maven中的一个元素,用于集中管理项目中的依赖版本解决了多个子模块中重复配置的问题,可有效减少maven的版本冲突问题使用dependencyManagement后,无需在子模块......
  • 跟着GPT学习Java线程中断机制
    Java中的线程中断是一个复杂但非常重要的概念,它允许一个线程告知另一个线程希望它停止正在做的事情。这个机制是协作式的,意味着被请求中断的线程需要自己检查中断状态,并且决定如何响应中断请求。下面我将系统地讲解Java中的线程中断知识点。 1.中断标志每个线程都有一个内部......
  • 定时器更新界面,线程报错
    项目场景:在javafx框架下使用线程更新UI的时候,出现无法正常更新UI。问题代码如下:packageclock;importjava.util.Calendar;importjava.util.GregorianCalendar;importjava.util.Timer;importjava.util.TimerTask;importjavafx.application.Application;importj......