android - AWS Android SDK 连接超时和重试

标签 android amazon-web-services amazon-s3 android-external-storage

我一直在使用 AWS android sdk(s) 在我的 android 应用程序中处理 S3 上的文件。用户面临一些问题,其中很少与连接超时有关。在我的应用程序中设置 AmazonS3 客户端时,我使用以下代码设置了超时和重试:

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setMaxErrorRetry(4);
clientConfiguration.setConnectionTimeout(10000); // default is 10 secs
clientConfiguration.setSocketTimeout(15000); // default is 50 secs

我读到的所有地方都说 maxErrorRetry 只对失败的可重试请求 进行重试。与连接超时和套接字连接超时相关的错误是否也属于此类?如果不是,这种情况的解决方案是什么?我已经为此搜索了很长一段时间,但没有得到任何明确的答案。

另外,我在 TransferListener 回调中遇到了两个特定的异常。有:

  1. 无法将对象内容存储到磁盘:读取超时(遇到任何 AWS 异常的所有用户中有 14% 遇到此异常)
  2. 无法将对象内容存储到磁盘:超时(遇到任何 AWS 异常的所有用户中有 17.4% 遇到此异常)

以上两个是我们最痛苦的。我一直假设这些发生是因为用户设备上没有更多的存储空间。我一直在使用外部存储中的应用程序特定目录来存储文件,现在考虑将这些文件移动到缓存中,以便系统在设备上没有剩余空间时处理文件清理。假设问题是用户设备上的空间不足,您认为这是一个好的解决方案吗? 发生上述存储相关异常的其他可能性是什么?

最佳答案

这个错误出现在SDK中的三个地方,其中两个地方很重要,适用于此。

(1) https://github.com/aws/aws-sdk-android/blob/0958a37b4757c41cac40597b973ff417e0b758c4/aws-android-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/ServiceUtils.java#L284

(2) https://github.com/aws/aws-sdk-android/blob/3983fda8c2d8703399ac4e9bf6ec0464d000a5af/aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/DownloadTask.java#L161

我怀疑它在 (2) 中,在您的案例中引发了异常。发生这种情况的原因有多种,存储空间不可用只是其中之一。

(1) S3对象不存在或S3 bucket/对象不具备所需权限。如果您拥有用户访问内容所需的权限,请检查 AWS S3 控制台。 (2) 下载过程中可能出现网络中断。传输过程中检查网络是否正常

检查 AWS CloudWatch Logs 以查看日志中是否有任何故障。

关于android - AWS Android SDK 连接超时和重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012320/

相关文章:

sql - 将 SQL Server 数据库从 AWS 迁移到 Azure

json - CloudFormation 模板 - 有什么方法可以获取 Spot-Fleet-Request ID?

ruby-on-rails - 在寻找不存在的 key 时,还有其他人遇到 aws-s3 超时问题吗? S3 对象存在?和 S3 Object.request( :head, ..)

java - 禁用自动旋转屏幕 - Android

android - 带有矢量拉伸(stretch)全屏的 SplashScreen

android - 我想从 native Activity 传递数据以使用 android 中的桥接对 native js 文件使用react

android - 展开 View 下方的布局不可见?

security - 亚马逊网络服务 : Setting S3 policy to allow putObject and getObject but deny listBucket

mysql - aws 数据管道 s3 到 mysql 错误

amazon-s3 - 是否可以使用Amazon S3将对象的所有权转让给另一个用户?