Android废弃Tasks.call方法替代方案求助,适配Google Drive备份原有逻辑
可行替换方案
你之前用TaskCompletionSource的思路是正确的,仅需要调整TaskCompletionSource的创建位置,在子线程执行前完成实例化并提前返回关联的Task对象即可,完全不需要修改上层调用逻辑。
修正后的queryFiles实现代码
public Task<FileList> queryFiles() { // 提前创建TaskCompletionSource,获取待返回的Task实例 TaskCompletionSource<FileList> taskCompletionSource = new TaskCompletionSource<>(); // 沿用原有的mExecutor执行异步任务,保持和原有逻辑一致的执行环境 mExecutor.execute(() -> { try { FileList result = mDriveService.files().list().setSpaces("drive").execute(); // 执行成功设置结果,自动触发上层addOnSuccessListener回调 taskCompletionSource.setResult(result); } catch (IOException e) { // 捕获异常传递给Task,自动触发上层addOnFailureListener回调 taskCompletionSource.setException(e); } }); // 直接返回Task对象,方法签名完全不变 return taskCompletionSource.getTask(); }
方案说明
- 方法返回值、签名完全和原有实现一致,BackupActivity中的调用逻辑不需要做任何修改
- 异常传递逻辑和原
Tasks.call完全对齐,原有成功、失败的监听回调都可以正常工作 - 仅修改
queryFiles内部实现,不需要重写整个DriveServiceHelper类,改造成本极低
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

