# Android 中实现 Wait 阻塞回调的指南
在 Android 开发中,异步操作是非常常见的,例如网络请求、数据库查询等。然而,处理回调时,很多情况下开发者希望能阻塞当前线程直到异步操作结束。这篇文章将教你如何在 Android 中实现 wait 阻塞回调的功能。
## 整体流程
在开始编码之前,先确认一下整个流程。下面是实现 Wait 阻塞回调的步骤:
| 步骤 | 说明 |            
                
         
            
            
            
            同步、异步,阻塞、非阻塞的理解异步:某个事情需要10秒。而我只需要调用一个函数帮我做,我可以干 其他的事情。(比如调用celery)同步:某个事情需要10秒完成,我等他完成之后再继续后面的工作。 举例:金拱门排队取餐        第一种方式(同步),下单拿号之后自己排队取餐。        第二种            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-19 21:13:59
                            
                                55阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            概述AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言,它是用来实现进程间通讯的,本文使用AIDL写一个小demo来实现夸进程间通讯  AIDL介绍文件类型:用aidl书写的文件的后缀是.aidl数据类型:基本类型, 字符串类型(String&CharSequence), List, Map, P            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-13 13:43:51
                            
                                27阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            查阅了网上的一些内容,自己总结了一下,算是比较全面了。定义:一个函数指针作为另一个函数A()的参数被调用时,它是回调函数。A(int m, int n, bool * f(m,n))1. 既然是函数的参数,就具备了扩展性和代码重用的作用,因为形参不变,实参是可变的。所以调用时,可以A(x,y,B),也可以A(x,y,C),这里B和C都是回调函数,有点像虚函数。(B和C可以实现不同的功能,或以不同的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-24 15:24:41
                            
                                328阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ###主线程不能被阻塞* 在Android中,主线程被阻塞会导致应用不能刷新ui界面,不能响应用户操作,用户体验将非常差* 主线程阻塞时间过长,系统会抛出ANR异常* ANR:Application Not Response;应用无响应* 任何耗时操作都不可以写在主线程* 因为网络交互属于耗时操作,如果网速很慢,代码会阻塞,所以网络交互的代码不能运行在主线程###只有主线程能刷新ui* 刷新ui的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-26 10:00:08
                            
                                20阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            handler在消息处理的时候用到了Looper.loop()方法ActivityThread程序的入口public static final void main(String[] args) {
        SamplingProfilerIntegration.start();
       ……
        Looper.prepareMainLooper();
        if            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-07 21:25:35
                            
                                39阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 如何在Android中实现在回调中阻塞线程
作为一名经验丰富的开发者,你可能会遇到一些需要在回调中阻塞线程的情况。这篇文章将教你如何实现这一功能。
## 流程步骤
下面是实现在回调中阻塞线程的流程步骤:
| 步骤 | 描述 |
| ---- | ---- |
| 1 | 创建一个接口来定义回调方法 |
| 2 | 在回调方法中执行需要阻塞的操作 |
| 3 | 在主线程中调用回调方法            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-04-17 06:52:30
                            
                                39阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            对于sendto,Linux 内核最后会调用udp_sendmsg,大概的调用堆栈是udp_sendmsg
security_socket_sendmsg
__sock_sendmsg
sock_sendmsg
sendto在sento里面,会根据socket的模式把一个标志传递给内核:if (sock->file->f_flags & O_NONBLOCK)
flags |=            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-20 22:27:27
                            
                                133阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            回调函数一定是个全局函数。若该函数是一个独立的函数,那该函数自然具有全局属性;若该函数是一个类的成员函数,那该函数前面需要加static关键字以去掉this指针。 一.类的某个成员函数Test()中需要用到一个功能函数Function(),而该功能函数Function()需要一个回调函数CallbackProc的指针作参数。写法如下:.h文件class A
{
//该函数内将调用CALL            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-24 22:53:33
                            
                                58阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.知识点:(详细见代码注释)1)同步调用: res1 = pool.submit(ju,'john1').result() 2)异步调用 pool.submit(ju,'john1') 3)二者区别 异步调用:只是提交了任务即可,不会在原地等待结果,马上运行下面的代码 同步调用:提交完任务后,在原地等待结果,等到结果后再执行后面的代码,代码运行的效果呈串行 4)异步回调机制 #回调机制:异步调用            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-26 15:25:02
                            
                                140阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1、线程生命周期线程总共有5大状态新建状态:新建线程对象,并没有调用start()方法之前就绪状态:调用start()方法之后线程就进入就绪状态,但是并不是说只要调用start()方法线程就马上变为当前线程,在变为当前线程之前都是为就绪状态。值得一提的是,线程在睡眠和挂起中恢复的时候也会进入就绪状态哦。运行状态:线程被设置为当前线程,开始执行run()方法。就是线程进入运行状态阻塞状态:线程被暂停            
                
         
            
            
            
            面试问题——阻塞和等待状态的区别阻塞等待TIMED_WAITING 阻塞Java 文档将BLOCKED状态正式定义为:“被阻塞等待监视器锁的线程处于此状态。”现实生活中的例子:今天你要去面试。这是您梦想中的工作,这是您过去几年的目标。你一大早醒来,做好准备,穿上你最好的衣服,在镜子前看起来很锐利。现在你走出车库,意识到你的妻子已经把车开走了。在这种情况下,你只有一辆车,那会发生什么?在现实生活中            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-14 12:41:56
                            
                                26阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            对于IO,有同步,异步,阻塞,非阻塞的分类,最近才稍微对这些分类有一些理解,下面记录一下:首先,我们需要划分IO,我们对IO操作分为两个步骤,1:程序发出IO请求,2:完成实际IO操作,阻塞、非阻塞是针对第一步划分的,而同步、异步是针对第二部划分的。阻塞/非阻塞:首先,我觉得应该理解一下什么叫阻塞。一个IO请求,在线程中进行,当这个IO请求没有数据或者没有有效数据拉来完成IO操作,那么这个请求不会            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-17 18:08:42
                            
                                60阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            定义kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理 好处解耦(各个功能通过消息队列通知完成功能,而不用必须等待上个功能模块的通知,类似于自己排队和黄牛帮排队)削峰(大量的处理响应需要经过消息队列,挨个挨个执行,不会使系统崩溃)可恢复性(当处理消息的进程挂掉,在消息队列中的消息可以在系统恢复时被处理)   消息队列的两种模式(点            
                
         
            
            
            
            NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。反应器(Reactor):用于事件多路分离和分派的体系结构模式  通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞 与非阻塞 。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-12 20:05:21
                            
                                37阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 在Android中实现线程阻塞的技巧
在Android开发中,线程的执行和等待是相当重要的概念,特别是当你需要处理多线程时。有时,我们需要阻塞线程以确保特定的操作按顺序执行。在这篇文章中,我将教会你如何在Android中实现“wait”以阻塞其他线程。我们将通过几个步骤来实现这个功能。
## 流程概述
以下是实现“wait”阻塞其他线程的流程:
| 步骤 | 说明            
                
         
            
            
            
            最近一个项目涉及到跨进程的操作,我们的应用ClientApp需要用到底层的数据,但是这个数据data是在一个不断监听接收底层的服务ServiceA里面,痛苦的是这个服务是在另外一个进程里面。虽然我们可以用万能的广播机制,但这会造成系统非常大的负担。另外一种方法可以用ContentProvider,很多时候还是挺好用的,但是实时性不够,两个进程之间也缺乏交互性,所以我决定用AIDL来实现这一功能。             
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-06 19:59:13
                            
                                507阅读
                            
                                                        
                                点赞
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             博主好厉害!终于是在这里看了个明白什么是回调机制。 
  
   
 说下自己的理解,方便以后回顾 
  
 首先需要有一个接口,在其中写一个方法。 
  
 要有两个类ClassA和ClassB 
  
 ClassA中有ClassB的成员对象(也就是ClassA的对象中会包含ClassB这个类的对象,我们想要让B去做一些操作时,就可以直接调用B中的方法了,记得要把接口参数传进            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-09 18:49:06
                            
                                79阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            有了 Service 类我们如何启动他呢,有两种方法:Context.startService()Context.bindService()在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.st            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-04 13:57:25
                            
                                35阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            跨进程服务调用,使用google提供的AIDL方法实现,下面是主要步骤            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2015-08-17 21:37:00
                            
                                214阅读