文档章节

安卓的线程使用

天使broken
 天使broken
发布于 2015/10/24 19:38
字数 554
阅读 151
收藏 3

   在安卓中很多时候我们会用到线程 ,举个例子如果说我从界面上获取到值 然后将值传递到接口,然后根据接口返回的东西执行下面的逻辑代码。由于本人的代码是用了很多的Tosat 提醒。所以就选择了Handler 。有时候会出现这种问题,在执行代码的时候因为是用线程去访问接口的 ,所以那个线程会和主线程一起运行。导致那个值是null 所以 第二次运行然后就会有值。所以请看解决方案。

   我们可以在外面声明创建一个线程 

      

 final Thread thread = new Thread(new Runnable(){
		            @SuppressWarnings("unchecked")
					@Override
		            public void run() {
		           
		                 try {
		                    Message message = new Message();
				            message.what = 1;
							map=(Map<String, Object>) search(default_code );
						         System.out.println(map);
				                 handler.sendMessage(message);//当返回值是null的时候就发送消息
				                 System.out.println("发送了消息");
						} catch (Throwable e) {
							e.printStackTrace();
						}
							
		            }
		            
		        });

这个代码块随便放到哪里都行。

然后我们最好在声明一个全局变量的handler,然后在我们需要执行的地方用这个handler将我们需要执行逻辑的代码块包裹住就行。在包裹住之前呢,我们需要执行我们的线程这样样子:

 new Thread(thread).start();

这个样子写会少一个线程的异常。之前我在写的时候发觉如果这样去更新,通知handler的话 如果是做一个简单的查询,更新界面,但是如果第二次去查询就会蹦掉出现一个线程的异常好像是不能启动还是什么的。在网上找了很多之后发觉这个样子写可以避免这个错误。

 最后我们的代码逻辑部分就是这样子的:

 new Thread(thread).start();
 handler= new Handler(){
		           @Override
		           public void handleMessage(Message msg){
		               super.handleMessage(msg);
		               if(msg.what == 1){
		               	System.out.println("更新后");
		             //这里写你需要执行的代码块即可  	
		               	}}};

这样就可以实现这个需求,当然如果数据量很小的话也可以用AsynTask.这个类异步请求。


如果有疑问可以发我的邮件:haiabi@163.com

© 著作权归作者所有

天使broken
粉丝 18
博文 35
码字总数 16482
作品 0
徐汇
Android工程师
私信 提问
Android 异步编程

文章作者:朱鸿,淘宝资深架构师 原文出处:http://hugozhu.myalert.info/2014/06/29/46-async-android.html Android的线程和内存模型 Android操作系统在boot后,会启动一个Zygote(受精卵)进...

鉴客
2014/07/01
1K
1
Android LiveData简介(一)

Android LiveData简介(一) 使用Android的LiveData,需要在gradle添加引用: (二)构建Observer,在Observer的onChanged中等待变化数据传导过来。 在LiveData中的数据变化,通过postValue...

开开心心过
2017/11/21
0
0
Android多线程:这是一份全面 & 详细的HandlerThread学习指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的机制的学习指南,内容包括:定性认知、定量使用、工作原理 & 源码分析,希望你们会喜欢。...

Carson_Ho
05/16
0
0
这是一份全面 & 详细的Android多线程知识总结指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录 1. 多线程基础知识 在了解Android多线程实现...

Carson_Ho
06/26
0
0
android基础知识02——线程安全4:HandlerThread

android的UI操作不是线程安全的,同时也只有主线程才能够操作UI,同时主线程对于UI操作有一定的时间限制(最长5秒)。为了能够做一些比较耗时的操作(比如下载、打开大文件等),android提供...

迷途d书童
2012/03/23
419
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部