文档章节

android Looper 非UI线程中更新UI

kingsOSZT
 kingsOSZT
发布于 2015/05/26 19:39
字数 258
阅读 502
收藏 8

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

测试service中使用了一个Toast来打印log。

提示无法调用Looper.prepare()

加入后代码正常执行。

 Looper.prepare();    
 Toast.makeText(getApplicationContext(), "Services Thread", Toast.LENGTH_LONG).show()
 Looper.loop();


不过再其他处重新加了一个Toast后出现错误,告知每一个线程只能有一个Looper


Caused by: java.lang.RuntimeException: Only one Looper may be created per thread

查看资料,prepared会创建一个Looper。

所以其他处不再需要重新调用。

     //Looper
    public static final void prepare() {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper());  //在当前线程中创建一个Looper  
    }
    private Looper() {
        mQueue = new MessageQueue();  //关键在这,创建Looper都干了什么。 其实是创建了消息队列  
        mRun = true;
        mThread = Thread.currentThread();
    }
    Looper
    public static final void prepare() {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
        sThreadLocal.set(new Looper());  //在当前线程中创建一个Looper
    }
    private Looper() {
        mQueue = new MessageQueue();  //关键在这,创建Looper都干了什么。 其实是创建了消息队列
        mRun = true;
        mThread = Thread.currentThread();
    }




© 著作权归作者所有

kingsOSZT
粉丝 2
博文 26
码字总数 8456
作品 0
松江
私信 提问
Handler+Looper+MessageQueue深入详解

在《Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面》中,我们讲到使用Thread+Handler的方式来实现界面的更新,其实是在非UI线程发送消息到UI线程,通知UI线程进行界面更新,...

鉴客
2011/09/17
18.6K
9
详解 Handler 消息处理机制(附自整理超全 Q&A)

Android 为什么要用消息处理机制 如果有多个线程更新 UI,并且没有加锁处理,会导致界面更新的错乱,而如果每个更新操作都进行加锁处理,那么必然会造成性能的下降。所以在 Android 开发中,...

银色子弹
06/04
0
0
拨云见日---android异步消息机制源码分析(一)

做过windows GUI的同学应该清楚,一般的GUI操作都是基于消息机制的,应用程序维护一个消息队列,开发人员编写对应事件的回调函数就能实现我们想要的操作 其实android系统也和windows GUI一样...

JohnnyR
2015/02/13
362
0
Android 的消息队列模型

Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。 Android系统中,Looper负责管理线程的消息队列和消息循环。我...

华宰
2011/05/09
1K
0
Android异步处理:Handler+Looper+MessageQueue深入详解

转载自:http://blog.csdn.net/mylzc/article/details/6771331,在原文基础上修改整理再发布。 概述:Android使用消息机制实现线程间的通信,线程通过Looper建立自己的消息循环,MessageQueu...

Xushao
2012/09/03
298
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么面试必问线程状态?你的回答满分了吗

看很多同学的面经、网上的面试资料,都不约而同的提到了一个基础问题:“你知道线程有几种状态吗?状态之间的扭转是怎样的?”,有准备的同学都知道有五种:New(新建)、Runnable(可运行)...

Z_J_H
23分钟前
4
0
如何保障云上数据安全?一文详解云原生全链路加密

点击下载《不一样的 双11 技术:阿里巴巴经济体云原生实践》 本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书,点击上方图片即可下载! 作者 李鹏(壮怀)阿里云容器服务高...

阿里巴巴云原生
23分钟前
3
0
获取数组的第一个元素

我有一个数组: array( 4 => 'apple', 7 => 'orange', 13 => 'plum' ) 我想获得此数组的第一个元素。 apple 预期结果: apple 一个要求: 它不能通过引用传递来完成 ,所以array_shift不是一......

javail
25分钟前
4
0
哈希情史知多少

<p align="right">——日拱一卒,不期而至!</p> 简介 hash是我们工作中经常听到的词,比如哈希表、哈希函数、hashCode、HashTable、HashMap等等,那么它们之间到底有怎样的爱恨情仇呢?来一...

彤哥读源码
31分钟前
4
0
SpringCloud 学习(5) --- Zuul(一)基本概念、配置

[TOC] Spring Cloud eureka:注册中心 服务端:提供注册 客户端:进行注册 ribbon:负载均衡(集群) Hystrix:熔断器,执行备选方案 Feign:远程调用 Zuul:网关,统一入口。 1.1、一夫当关,...

庭前云落
34分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部