在Android中从工作线程内部创建线程

在Android中从工作线程内部创建线程,android,multithreading,android-asynctask,worker-thread,Android,Multithreading,Android Asynctask,Worker Thread,在我的应用程序中,我需要进行一些TCP套接字调用 要做到这一点,我必须执行以下步骤: 1.将我的数据/命令转换为字节流 2.创建套接字并发送命令和接收响应 3.解析响应和存储以供UI使用 现在我已经创建了一个后台线程,可以完成所有三个步骤 但在我的socket客户端中,我还想为每个新命令创建一个新线程(步骤2) 这意味着在上述三个步骤的公共工作线程中有许多工作线程 那么,对于已经在工作线程中发生的步骤#2,可以使用异步任务吗。或者我在这种情况下使用普通线程 人们可能会想,为什么我不能在一个工作线

在我的应用程序中,我需要进行一些TCP套接字调用

要做到这一点,我必须执行以下步骤: 1.将我的数据/命令转换为字节流 2.创建套接字并发送命令和接收响应 3.解析响应和存储以供UI使用

现在我已经创建了一个后台线程,可以完成所有三个步骤

但在我的socket客户端中,我还想为每个新命令创建一个新线程(步骤2) 这意味着在上述三个步骤的公共工作线程中有许多工作线程

那么,对于已经在工作线程中发生的步骤#2,可以使用异步任务吗。或者我在这种情况下使用普通线程

人们可能会想,为什么我不能在一个工作线程中完成所有三个步骤。 关键是,即使我只为所有套接字命令创建一个工作线程,步骤1的初始请求本身也可能来自工作线程

因此,我不能假设调用来自主UI线程。 另外,我想问,是否不建议在android中创建自己的工作线程,为什么

谢谢,
Sunny

您不能使用AsyncTask进行此操作

异步任务只能是

但是,您可以使用标准线程

类神话阅读{

   @override
   public void run() {
          ......
          // when needed - span a new working thread fro within old one
          new MyOtherThread(...).start();  
   }
}

这里没问题

如果您觉得正在生成的线程数量可能会失控,那么使用。concurrent包有几个功能,例如。 线程池执行器


最后,如果您的任务是 是使用多线程架构传输大量小对象, 使用可能是最有效的方法


祝你好运。

从前两段开始,我知道你想通过套接字建立一些通信。我不认为为每个命令创建一个线程是一个好方法,因为线程本身和打开/关闭套接字都是昂贵的操作。 我建议只创建一个线程来打开和监视/写入/读取套接字中的数据。如果这些命令频繁,则保持一个套接字处于活动状态比频繁打开/关闭套接字更合适。或者,我会创建一个额外的线程来完成序列化/反序列化命令的额外工作(如果它们非常耗时的话)

人们可能会想,为什么我不能在一个工作线程中完成所有三个步骤。关键是,即使我只为所有套接字命令创建一个工作线程,步骤1的初始请求本身也可能来自工作线程

我不认为这会对你的设计方法产生很大的影响

因此,我不能假设调用来自主UI线程。另外,我想问,是否不建议在android中创建自己的工作线程,为什么

Android提供了一些非常好的通用类,如AsyncTask和HandlerThread,用于一般用途,但如果上述类不符合设计要求,任何人都可以自由创建工作线程。如果我处理套接字编程,我个人会创建自己的工作线程

我建议看一看JavaNIO库,特别是选择器和SocketChannel类