Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中同步执行多个任务_Android_User Interface_Asynchronous_Interaction - Fatal编程技术网

在Android中同步执行多个任务

在Android中同步执行多个任务,android,user-interface,asynchronous,interaction,Android,User Interface,Asynchronous,Interaction,我不知道如何优雅地解决以下任务: 我有几个代码块(操作)要执行 每个块可以返回false的true,以指示可能进一步执行 在每个模块内部,我必须使用异步方法调用(因为Android是完全异步的) 处理操作示例(现在未按预期工作): 我应该如何修改操作处理以支持Android的异步模型?如果要完成的处理量在毫秒范围内,您可以将代码重组为状态机—枚举子任务列表和跟踪当前或下一个要执行任务的变量。本质上,当一个事件发生时,您将处理待办事项列表,直到到达需要异步操作结果的任务(状态)。此时启动异步操作并

我不知道如何优雅地解决以下任务:

  • 我有几个代码块(操作)要执行
  • 每个块可以返回
    false
    true
    ,以指示可能进一步执行
  • 在每个模块内部,我必须使用异步方法调用(因为Android是完全异步的)
  • 处理操作示例(现在未按预期工作):


    我应该如何修改操作处理以支持Android的异步模型?

    如果要完成的处理量在毫秒范围内,您可以将代码重组为状态机—枚举子任务列表和跟踪当前或下一个要执行任务的变量。本质上,当一个事件发生时,您将处理待办事项列表,直到到达需要异步操作结果的任务(状态)。此时启动异步操作并返回。当您从用户输入或其他方式获得事件调用时,您记录数据,然后从保存的状态号继续执行状态机,直到它再次命中异步操作并返回。但这只适用于以毫秒为单位测量处理时间的情况,否则您的行为会滞后且无响应,在极端情况下会触发ANR


    如果需要进行更多处理,则应在后台线程或服务中进行处理,该线程将消息发布到UI线程以启动异步事件,然后等待UI线程调用可转换为所需结果的事件,但与此同时,UI线程可以自由响应无关事件。

    如果要完成的处理量在毫秒范围内,则可以将代码重新构造为状态机—枚举子任务列表和跟踪当前或下一个要执行任务的变量。本质上,当一个事件发生时,您将处理待办事项列表,直到到达需要异步操作结果的任务(状态)。此时启动异步操作并返回。当您从用户输入或其他方式获得事件调用时,您记录数据,然后从保存的状态号继续执行状态机,直到它再次命中异步操作并返回。但这只适用于以毫秒为单位测量处理时间的情况,否则您的行为会滞后且无响应,在极端情况下会触发ANR


    如果需要进行更多处理,则应在后台线程或服务中进行处理,该线程将消息发布到UI线程以启动异步事件,然后等待UI线程调用可转换为所需结果的事件,但同时让UI线程自由响应不相关的事件。

    Ok,下面是我如何解决这个问题的:

  • 我已经创建了执行上下文,它在操作之间共享
  • 每个操作都可以使用适当的方法调用下一个操作、停止进一步处理等
  • 每个操作可以是后台服务,也可以是活动
  • 所有操作完成后,通过回调通知调用方
  • 由于操作也可以是异步的,所以它们使用通知来知道操作何时完成以及应该进行进一步的处理

  • 好的,下面是我如何解决这个问题的:

  • 我已经创建了执行上下文,它在操作之间共享
  • 每个操作都可以使用适当的方法调用下一个操作、停止进一步处理等
  • 每个操作可以是后台服务,也可以是活动
  • 所有操作完成后,通过回调通知调用方
  • 由于操作也可以是异步的,所以它们使用通知来知道操作何时完成以及应该进行进一步的处理

  • 实际上,处理量可能很大。现在我正在重新构造代码,使其成为事件驱动的。实际上,处理量可能很大。现在我正在重新构造代码,使其成为事件驱动的。
          List<Operation> operations = command.getOperations();
          for (Operation operation : operations) {
              Log.d(TAG, "Processing operation: " + operation);
              OperationResult result = operation.execute(activity);
              Log.d(TAG, "Operation result is: " + result);
              if (!result.canContinue()) {
                  break;
              }
          }
    
     final OperationResult result = new OperationResult();
     final class ButtonListener implements DialogInterface.OnClickListener {
    
        public void onClick(DialogInterface dialog, int id) {
            switch (id) {
            case DialogInterface.BUTTON_POSITIVE: {
                    result.setCanContinue(true);
            }
            case DialogInterface.BUTTON_NEGATIVE: {
                dialog.cancel();
                    result.setCanContinue(false);
            }
        }
    }