首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Aws Sdk 2.12.3 TransferService使用情况

Aws Sdk 2.12.3 TransferService使用情况
EN

Stack Overflow用户
提问于 2019-03-14 15:14:02
回答 1查看 893关注 0票数 7

我们使用的是Amazon SDK的2.4.2版本,用于文件上传和下载。最近我们把它更新到了2.12.3。

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

但为了支持限制后台服务的Android8优化,在最新版本中,SDK已经停止了内部调用TransferService,并鼓励开发者显式调用。建议调用服务的一个地方是应用程序类的onCreateTransferService已经被简化为仅仅是另一个类TransferNetworkLossHandler的初始化器,它扩展了BroadcastReceiver,在连接发生变化的情况下处理下载的暂停/恢复。在新旧版本的软件开发工具包中启动TransferService的一个主要区别是,早期是使用startService方法启动的。但现在亚马逊的文档建议从"startForegroundService“开始,在8.0及更高版本的设备上使用通知对象。

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

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

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

TransferNetworkLossHandler.getInstance(getApplicationContext());

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

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

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

我们有没有办法在8.0或更高版本的设备上使用Amazon SDK上传/下载而不使用通知?

此外,高度赞赏与此类用例的最佳实践相关的任何链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 02:23:04

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

我把这段代码放在我的Application类中,或者放在我需要监听网络更新的活动中。

我有一个问题,当我离线时,我的上传会挂起在WAITING_FOR_NETWORK状态,再也不会恢复。现在它工作得很好。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55156841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档