【需求】当主线程需要用到子线程的执行结果,即主线程需要等子线程执行完毕之后继续运行,这时候应该如何处理?【解决方法】1. Sleep,轮询机制or Notify子线程启动后,主线程进入wait状态,等待notify;或主线程轮询查询有多少子线程在运行,若为零,则结束轮询,继续运行。public void run() {  
        System.out.println("---------            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-16 16:55:58
                            
                                165阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            背景介绍我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运行的背后,究竟隐藏了多少不为人知的秘密呢?线程间互通暗语,传递信息究竟是如何做到的呢?Looper、Handler、MessageQueue究竟在这背后进行了怎样的运作。本期,让我们一起从Thread开始,逐步探寻这个完美的线程链背后的秘密。注意,大部分分析在代码中,所以请仔细关注代码哦!从Tread的创            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-01 20:37:54
                            
                                143阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            次线程通过handler将message传递给主线程的例子,已经在上一篇博文中贴出,这里不赘述了。举一反三,既然次线程可以传递消息给主线程,那么主线程能不能传递消息给次线程呢?关于实现这个过程,我想到了两个思路。1.参数传递,将要传递的消息封装成参数,传递给次线程;2.handler的消息传递机制;第一种思路当然没有问题,至于第二种思路,我一开始想到的是将上一篇博文中的代码逆向思维下。代码如下:当            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-25 16:51:21
                            
                                9阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            首先参考链接修改优化代码handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            @Override
            public void run() {
                Glide.with(context)            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-04-18 11:23:57
                            
                                36阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前言:1.对Thread.sleep(long duration)的认知。        由于CPU分配的每个线程的时间片极为短暂(一般为几十毫秒),所以,CPU通过不停地切换线程执行,这样就给程序员一种错觉,以为多个线程是在同时执行。sleep就是正在执行的线程主动让出CPU,CPU去执行其他线程,在sleep指定的时间过后,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-06 22:33:23
                            
                                209阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新 概念。我们的主线            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-02 13:04:36
                            
                                115阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            知乎上看到这样一个问题Android中为什么主线程不会因为Looper.loop()里的死循环卡死?,于是试着对Handler源码重新看了一下,其实Android的消息机制是Pipe+epoll(了解epoll),有消息时则依次执行,没消息时调用epoll.wait等待唤醒;由于Android中生命周期、UI绘制都是动过Handler实现的,因此自然不会发生阻塞卡死。Android为了保证主线程在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-31 23:15:40
                            
                                165阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-29 16:58:51
                            
                                303阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            结论初始化后,所有主线程做的事情都是在looper.loop()中完成的,因为主线程不做其他事,所以不会卡死基于linux的epoll模型,当主线程没有message消费时,会进入睡眠状态(简单理解),等到有新的可消费的Message时,再转为活跃状态处理Message(类似一个事件回调)。主线程在睡眠状态会让出CPU,并不是一直不停在执行循环。如有兴趣了解下epoll机制可以看看这篇文章:NIO            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-08 08:56:17
                            
                                182阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-17 15:37:03
                            
                                222阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            首先 先 明白一个问题:什么是ANRApplication Not Responding,意思是”应用没有响应“以前我的理解就是 “在主线程做了耗时操作”就会引起ANR,现在我觉得我是错误的,ANR的意思是应用没有响应,耗时操作实际上 并不一定会导致没有响应,我对没有响应的理解是有人(事件或操作)发出了一个请求,但是主线程没有对这个人进行反馈(可能是没时间、可能是不想理、可能是手被绑住了没有办法理            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-31 20:15:33
                            
                                156阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             当启动一个apk应用程序的时候,Android会开启一个主线程(UI线程),由于主线程是非线程安全,当我们需要在主线程中操作大数据或者联网等这些耗时的操作时,会影响到Android UI的显示并且会出现假死状态,这对用户的体验来说是很不乐观的。因此,我们需要把那些耗时的操作交给另外一个线程来处理,子线程将处理的结果返回给主线程,主线程根据得到的数据作出相应的操作。Handler就实现了            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-28 15:57:34
                            
                                414阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 如何实现 Android 主线程和子线程通信
## 概述
在 Android 开发中,主线程(UI 线程)负责处理 UI 操作,而子线程负责执行耗时操作,为了避免在主线程中执行耗时操作导致界面卡顿,我们通常需要在子线程中进行耗时操作,然后通过一些方式将结果传递给主线程进行展示。本文将介绍如何实现 Android 主线程和子线程之间的通信。
## 流程
下面是实现 Android 主线程和子            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-05-25 05:15:10
                            
                                496阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、前期基础知识储备 当一个应用程序启动之后,android系统会为这个应用程序创建一个主线程(Main Thread),它负责渲染视图,分发事件到响应监听器并执行,对界面进行轮询的监听。因此,一般也叫做“UI线程”(UI Thread)。 android系统不会给应用程序的多个元素组件建立多个线程来执行。一个视图(Activity)中的多个view组件运行在同一个UI线程当中。因此,多个view            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-17 21:39:55
                            
                                104阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件。例如访问网络获取数据,然后需要将这些数据处理显示出来。就出现了上面所说的情况。原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对那            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-22 20:16:30
                            
                                66阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            最近学习Android,学习的时候会用Java的一些机制去理解,但是往往还是有些区别的。下面我们来看看Android下面的线程使用方法,这里通常会用到Handler。Handler的作用就是一个队列,先进先出,实现了异步机制。下面是这个工程的main.xml配置文件:(两个例子的使用同一个xml) <?xml version="1.0" encoding="utf-8"?>            
                
         
            
            
            
            一、Handler的定义:          主要接受子线程发送的数据, 并用此数据配合主线程更新UI.          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-06 14:21:12
                            
                                78阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Handler的定义:主要接受子线程发送的数据,并用此数据配合主线程更新UI。解释:当应用程序第一次启动时,Android首先会开启一个主线程(Main Thread),主要负责处理与UI相关的事件,如用户的按键事件、用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所有主线程通常又被叫做UI线程。Android的消息传递机制是另一种形式的”事件处理”,这种机制主            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-03 20:15:53
                            
                                65阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            ActivityThread在Android中它就代表了Android的主线程,但是并不是一个Thread类。严格来说,UI主线程不是ActivityThread。ActivityThread类是Android APP进程的初始类,它的main函数是这个APP进程的入口。APP进程中UI事件的执行代码段都是由ActivityThread提供的。也就是说,Main Thread实例是存在的,只是创建            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-16 19:31:34
                            
                                233阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            之前腾讯笔试有一道题目就是,请写出在子线程中更新UI的几种办法?在实际项目中,我们也经常会遇到开辟子线程做事情的途中需要更新一下UI,这里总结一下Android和iOS快速切换到主线程更新UI的办法。Android方法一:view.post(Runnable action)
这是我认为最简单的方法了,比如你在子线程获得了多个数据,需要更新textview显示这些数据,可以这样做textView.p            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-06 11:07:34
                            
                                261阅读