跳到主要内容

TaskAPI

注意

该门户网站正在开发中。文档的完整版本请看这里.

Task - 这是一个异步任务,在相应的回调(onFailure, onSuccess)中返回错误或值。

作为实现示例,使用了SDK支付方法getProducts()。

处理Task执行结果

异步执行的方法返回Task。例如,RuStoreBillingClient.getProducts()返回Task。这意味着如果方法执行成功,Task将返回ProductsResponse:

val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()

获取方法执行成功的结果,请向Task添加OnSuccessListener回调:

val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()task.addOnSuccessListener {    \`\`// Process success}

获取执行错误,请向Task添加OnFailureListener回调:

val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()task.addOnFailureListener {    \`\`// Process error}

果需要同时获取成功结果和错误,向Task添加OnCompleteListener回调:

val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()task.addOnCompleteListener(object : OnCompleteListener\<ProductsResponse\> {    \`\`override fun onFailure(throwable: Throwable) {        \`\`// Process Error    \`\`}    \`\`override fun onSuccess(result: ProductsResponse) {        \`\`// Process success    \`\`}})

多线程

添加到Task的Callback将在应用程序的主线程中执行。如果需要在其他线程执行Callback,请在添加Callback的方法中传递您的Executor。

通过协程添加executor:

val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()task.addOnCompleteListener(Dispatchers.IO.asExecutor(), object : OnCompleteListener\<ProductsResponse\> {    \`\`override fun onFailure(throwable: Throwable) {        \`\`// Process Error    \`\`}    \`\`override fun onSuccess(result: ProductsResponse) {        \`\`// Process success    \`\`}})

同步执行

如果您的代码已在工作线程中运行,并且您需要同步获取结果,您可以使用task.await():

try {    \`\`val task: Task\<ProductsResponse\> = RuStoreBillingClient.products.getProducts()    \`\`task.await()} catch (e: CancellationException) {    \`\`// Process error}

wait()方法会阻塞正在执行它的线程。如果您使用Kotlin,建议使用协程,或者如果您使用的语言不支持协程,则应在后台线程中调用此方法。

建议仅在以下SDK版本之后使用*await()*方法:

  • In-app支付SDK - billingclient:1.1.1
  • 推送通知集成SDK - pushclient:0.1.8
  • 评论和评分集成SDK - review:0.1.6
  • 应用程序更新SDK - appup

于更早版本的SDK调用*await()*方法可能导致电池使用量增加!

通过协程处理Task API

可以使用以下代码在协程中处理Task:

suspend fun \<T\> Task\<T\>.wrapInCoroutine(): Result\<T\> {    \`\`return suspendCancellableCoroutine { continuation -\>        \`\`addOnCompleteListener(object : OnCompleteListener\<T\> {            \`\`override fun onSuccess(result: T) {                \`\`if (continuation.isActive) {                    \`\`continuation.resume(Result.success(result))                \`\`}            \`\`}            \`\`override fun onFailure(throwable: Throwable) {                \`\`if (continuation.isActive) {                    \`\`continuation.resume(Result.failure(throwable))                \`\`}            \`\`}        \`\`})        \`\`continuation.invokeOnCancellation {            \`\`cancel()        \`\`}    \`\`}}

与其他SDK的兼容性 PAGEPAGE sdk/sdk-compatibility

使用的SDK版本必须兼容。以下是版本兼容性表。

RuStore SDK 用于 in-app 支付RuStore SDK 用于集成评论和评分RuStore 应用程序更新SDKRuStore SDK用于集成推送通知
3.0.01.0.01.0.01.0.0

用上述任何一个版本的SDK时,必须使用表中指定的其他SDK版本(不低于指定版本)。