gpt4 book ai didi

android - Aws SDK 2.12.3 TransferService 使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:18 25 4
gpt4 key购买 nike

我们使用 Amazon SDK 2.4.2 版进行文件上传和下载。最近我们更新到 2.12.3。

在旧版本中,任何上传或下载任务都用于在后台内部启动 TransferService,处理网络连接监控等。

但为了支持Android 8限制后台服务的优化,在最新版本中,SDK已经停止在内部调用TransferService,并鼓励开发者显式调用。一个推荐的调用服务的地方是 Application 类的 onCreateTransferService 已缩减为仅作为另一个类 TransferNetworkLossHandler 的初始化程序,它扩展了 BroadcastReceiver,后者在连接发生变化时处理暂停/恢复下载。在旧版 SDK 和新版 SDK 中启动 TransferService 的一个主要区别在于,它更早地使用 startService 方法启动。但现在 Amazon 文档建议在 8.0 及更高版本的设备上使用带有 Notification 对象的“startForegroundService”开始。

我们的应用程序每晚都会在后台上传调试日志,无论当时是否正在使用该应用程序。 SDK 更新后,我们必须在 Oreo 设备上运行 TransferService 时强制设置通知。我们想使用 Aws SDK 上传日志,但不想显示通知,因为我们认为这会给我们的用户带来糟糕的体验。当用户启动应用程序时,仅调用不带通知对象的 startService 将起作用。但是当应用程序未运行或不在内存中时,我们的上传日志任务将被触发,该任务调用 Application 类的 onCreate ,后者又调用 startService 导致崩溃,因为 startService 无法在应用处于后台时调用。

为避免这种情况,我们尝试绕过 TransferService 的使用,并在 Application 类中自行初始化 TransferNetworkLossHandler。当应用程序正在使用或在内存中时,这似乎有效。但是如果我们刷出应用程序,后台调用时日志上传不起作用。日志也没有帮助。没有错误日志,我们正在获取正确的观察者 ID,但文件未上传到存储桶。

我们使用以下代码绕过 TransferService 并在 Application 类的 onCreate 中初始化 TransferNetworkLossHandler

TransferNetworkLossHandler.getInstance(getApplicationContext());

为了在初始化后启动虚拟网络检查,我们使用

TransferNetworkLossHandler.getInstance(getApplicationContext()).onReceive(context, new Intent().setAction(ConnectivityManager.CONNECTIVITY_ACTION)); 

因此,基于网络连接,SDK 可以暂停或恢复下载。

有什么方法可以在8.0及以上的设备上使用Amazon SDK上传/下载而不使用通知?

此外,我们非常感谢与此类用例的最佳实践相关的任何链接。

最佳答案

registerReceiver(TransferNetworkLossHandler.getInstance(getApplicationContext()), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

我将此代码放在我的应用程序类中或我需要监听网络更新的 Activity 中。

我有一个问题,当我处于离线状态时,我的上传会挂起在 WAITING_FOR_NETWORK 状态并且永远不会恢复。现在它工作正常。

来源: https://github.com/aws-amplify/aws-sdk-android/issues/899

关于android - Aws SDK 2.12.3 TransferService 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com