Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中从ServerTask中启动clientTask?_Android - Fatal编程技术网

如何在Android中从ServerTask中启动clientTask?

如何在Android中从ServerTask中启动clientTask?,android,Android,我有一个客户端-服务器应用程序,其中每个应用程序都具有客户端-服务器两种功能 一个应用中的客户端发送一个号码,第二个应用中的服务器端必须回复该号码。要回答这个问题,我需要启动一个客户端任务来完成它。但我得到错误“必须从主线程调用方法executeOnExecutor,当前推断的线程是工作线程” 我无法显示确切的代码,因此为了更好地解释,我发布了一些psuedo代码: private class ServerTask extends AsyncTask<ServerSocket, Strin

我有一个客户端-服务器应用程序,其中每个应用程序都具有客户端-服务器两种功能

一个应用中的客户端发送一个号码,第二个应用中的服务器端必须回复该号码。要回答这个问题,我需要启动一个客户端任务来完成它。但我得到错误“必须从主线程调用方法executeOnExecutor,当前推断的线程是工作线程”

我无法显示确切的代码,因此为了更好地解释,我发布了一些psuedo代码:

private class ServerTask extends AsyncTask<ServerSocket, String, Void> {
    @Override
    protected Void doInBackground(ServerSocket... sockets) {

      ...receive from client.. do processing. need to reply
      new ClientTaskName.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,message);

    }         
 }

 private class ClientTaskName extends  AsyncTask<Message, Void, Void> {
    @Override
    protected Void doInBackground(Message... params) {
        //... do something...
        return null;
    }

 }
私有类ServerTask扩展了AsyncTask{
@凌驾
受保护的空doInBackground(服务器插座…插座){
…从客户端接收..进行处理.需要回复
新建ClientTaskName.executeOnExecutor(异步任务.SERIAL_EXECUTOR,消息);
}         
}
私有类ClientTaskName扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(消息…参数){
//…做点什么。。。
返回null;
}
}
如果不允许我从serverTask中创建clientTask,我的选项是什么

编辑:

我添加了一个基本的整体流程:

  • 进程A将msg1发送到进程B
  • 进程B在ServerTask中接收它,答复它
  • 进程A接收应答,根据应答决定一些附加参数,发送带有所决定参数的ACK
  • 进程B接收ACK并使用接收到的参数配置其自己的未来消息
  • 这要求ServerTask在其doInBackground函数中处理两种类型的消息,一种是它只需要ACK,另一种是它将回复收到的消息

    步骤1-4将运行任意次数


    使用的SDK:API 19使用线程而不是异步任务


    这就是通常的做法。

    你不能从onPostExecute开始吗?@Blackbelt:不,我不能。我添加了基本流程来解释为什么需要RunNuithRead?