android 子线程通过bundle、handler.sendMessage(message)向主线程传输多个类型数据,包括listMapString,Object

本文主要是介绍android 子线程通过bundle、handler.sendMessage(message)向主线程传输多个类型数据,包括listMapString,Object,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android 端在进行耗时的网络连接或数据处理时,为了不影响主界面的实时响应(防止界面假死状态的发生),需要创建自定义子线程,如子线程处理后的数据需要传送至主界面(主ui线程中),可以选择handleMessage来实现:

1、在自定义函数中开辟一个子线程,并通过handler.sendMessage(message)发送消息给消息队列

public void自定义函数() {

    new Thread(new Runnable() {@Override
        public void run() {url=url1+"?"+url2;System.out.println("1");HttpGet request = new HttpGet(url);         
            HttpResponse reponse = null;try {reponse = new DefaultHttpClient().execute(request);System.out.println("3");//获取返回码,等于200即表示连接成功,并获得响应
                if(reponse.getStatusLine().getStatusCode()==200){System.out.println("4");
                   String  result= EntityUtils.toString(reponse.getEntity());Message message=new Message();message.what=QURY_RESPONSE;message.obj=result;//从服务器返回的数据handler.sendMessage(message);//发送至主界面显示
                }else {System.out.println("连接失败");}} catch (IOException e) {e.printStackTrace();}}}).start();
}
2、在主ui线程中,实例化android.os.Handler对象,并从消息队列中取出从子线程压入的数据
private android.os.Handler handler=new android.os.Handler(){@Override
    public void handleMessage(Message msg) {switch (msg.what){case QURY_RESPONSE:String getString= (String) msg.obj;try {JsonToString(getString);//json解析后显示} catch (JSONException e) {e.printStackTrace();}break;}}
};
特别的,当传送的对象不但是String类型时,或者其他多个基本数据类型,或者List<Map<String,Object>>类型的list时,则需要通过bundle集合来压入不同类型的object,子线程中部分代码如下:
                   Bundle bundle=new Bundle();
                   Message message=new Message();
                   ArrayList llist=new ArrayList();//ArrayList 继承自ParcelableArrayList
                   llist.add(mylist);//mylist是List<Map<String,Object>>类型的对象bundle.putParcelableArrayList("llist", llist);bundle.putString("result", result);bundle.putInt("position", position);message.what=CHECKSTATE;message.setData(bundle);
                   handler.sendMessage(message);
主线程handleMessage(Message msg) {...}中添加如下代码:
                case CHECKSTATE:Bundle bundle=msg.getData();
                   ArrayList llist=bundle.getParcelableArrayList("llist");
                   final List<Map<String,Object>> mylist= 
                                (List<Map<String,Object>>) llist.get(0);//需要强制转换list类型
                   final int position =bundle.getInt("position");String resultString =bundle.getString("result");
                 break;




这篇关于android 子线程通过bundle、handler.sendMessage(message)向主线程传输多个类型数据,包括listMapString,Object的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604461

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.