Android 在主线程中运行的回调方法是否可以在OnStand命令的中间运行?

Android 在主线程中运行的回调方法是否可以在OnStand命令的中间运行?,android,multithreading,service,Android,Multithreading,Service,我知道onStartCommand中的代码将在主线程上运行。 在这个方法中,我产生了一个新的网络线程,它与服务器通信,当它完成时,它执行一个回调方法,该方法也在主线程中运行 我的问题是,如果在主线程中执行Stand命令和回调方法的两种方法,并且每当网络调用结束时执行回调方法,那么在OnStistCudio方法的执行过程中是否可以执行回叫方法的代码行? 这是如何工作的?如果生成的网络线程进行了一个您确定将在主线程中执行的函数调用,那么实现这一点的唯一方法是使用某种共享资源,最常见的是:某种工作队列

我知道onStartCommand中的代码将在主线程上运行。 在这个方法中,我产生了一个新的网络线程,它与服务器通信,当它完成时,它执行一个回调方法,该方法也在主线程中运行

我的问题是,如果在主线程中执行Stand命令和回调方法的两种方法,并且每当网络调用结束时执行回调方法,那么在OnStistCudio方法的执行过程中是否可以执行回叫方法的代码行?


这是如何工作的?

如果生成的网络线程进行了一个您确定将在主线程中执行的函数调用,那么实现这一点的唯一方法是使用某种共享资源,最常见的是:某种工作队列、套接字或两个线程之间共享的变量(通过方法调用设置)这必须由主线程轮询,从而使其执行某个方法

我认为最简单的方法是工作队列,但根据您在评论中发布的链接,它提到了JSON,它通常使用TCP/IP套接字。我将介绍每种方法的典型工作原理

工作队列:

网络线程将创建某种工作条目,并将其排入主线程工作队列。如果主线程位于方法中间(OnStistCug()),则它也不能执行工作条目。最有可能的是,当它完成当前方法时,它将返回并返回一个轮询方法,该方法将条目从队列中拉出来。因此,如果使用这种方法,那么onSuccess()和onFailure()将创建工作条目并将其排队,这些工作条目将在从onStartCommand()返回后执行

JSON套接字:


此方法与工作队列非常相似,但将使用套接字消息代替工作条目。还有一个函数将轮询(很可能是通过select()或poll())套接字,并将收到的消息作为工作项处理。因此,如果使用这种方法,那么onSuccess()和onFailure()将创建并发送套接字消息,这些消息将在从onStartCommand()返回后执行。

不清楚回调方法的含义,如果它是从网络线程方法调用的,您如何知道它将在主线程上执行?它是否创建并排队某种请求,由主线程处理和执行?是的,我正在使用,网络调用在线程池中触发。然而,每当它完成时,它调用onSuccess或onFailure,这些方法在主线程中处理。然后,就像@Brady所暗示的那样,主线程运行的代码不可能被“中断”,主线程也不可能在“中间”运行其他任何东西。如果“中间”运行了其他任何内容,那么另一个线程正在运行它。非常感谢@Brady,你今天真的帮了我很多。@HéctorJúdezSapena,很乐意帮忙。我喜欢你有趣的问题!