Google Play服务任务API:continueWith vs continueWithTask

Fab*_*cio 9 android firebase

这是关于任务.

task.continueWith()和之间的区别task.continueWithTask()是什么?你能为每个人提供一个例子吗?

Dou*_*son 12

continueWithcontinueWithTask之间的主要区别是您传递给它的Continuation的泛型类型之一.

你可以将Continuation视为将某些输入类型转换为某种输出类型的东西.如果定义a Continuation<IN, OUT>,INthen通过a 传递给其方法的输入类型在哪里Task<IN>,并且OUT是方法返回的类型.

在调用时continueWith,您传递一个Continuation<IN, OUT>,并且该then方法应该计算并返回OUT给定Task<IN>值作为输入的值.如果您没有要进行转换的阻塞工作,可以选择执行此操作,例如将整数数组减少为其元素的总和或计算String中的单词数.

在调用时continueWithTask,你传递一个Continuation<IN, Task<OUT>>,并且该then方法应该返回一个Task<OUT>最终生成OUT值的值,给定IN值作为输入.如果您能够将转换工作委派给现有的可重用任务,则可以选择此选项.

实际上,您不需要选择其中一个来完成您的工作.这是一个首选的风格问题,或者如果你有一个很好的Task准备委托你的对话而不是一个Continuation.通常,如果您有一系列转换链接在一起,则只使用Continuations.

这里的javadoc链接显示了Continuations的一些示例.另外,要了解更多信息,您可以在我的博客系列的第三部分中阅读它们.公平地说,continueWithTask是Task API的唯一部分,我没有直接讨论该系列中的任何地方,主要是因为它在概念上并没有太大差别continueWith.


34m*_*4m0 6

只是为了补充Doug说的话,我会这样说:

continueWiththen方法的结果包装在一个Task. continueWithTask将不会; 它希望该then方法返回一个Task,从而避免任务中任务的双重包装.

continueWithTask 当你想要一起使用Continuation和TaskCompletionSource时,它是完美的.