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 应用程序更新SDK | RuStore SDK用于集成推送通知 |
---|---|---|---|
3.0.0 | 1.0.0 | 1.0.0 | 1.0.0 |
用上述任何一个版本的SDK时,必须使用表中指定的其他SDK版本(不低于指定版本)。