使用带有周期性工作者的Amplify存储失败



在我的android应用程序中,我使用Amplify以便从S3桶下载文件。

有两种方式开始下载:

  1. 通过按按钮-工作良好
  2. 由周期性工作线程执行,它偶尔会抛出以下异常:
AmplifyException {message=您的AWS S3 Storage列表操作出错,cause=java.lang。{cmp=com.netafim.tech_app/com.amazonaws.mobileconnectors.s3.transferutility.TransferService}: app处于后台uid UidRecord{e945dd1 u0a281 TRNB bg:+1m5s172ms空闲更改:空闲进程:1 seq(0,0,0)}, recoverySuggestion=请参阅所附异常获取更多信息和建议}在开始$ 0 $美元com.amplifyframework.storage.s3.operation.AWSS3StorageListOperation.lambda AWSS3StorageListOperation (AWSS3StorageListOperation.java: 95)$$Lambda$AWSS3StorageListOperation$h_rYgEkUSCQ04HohVqKR6853m80.run(来源未知:2)java.util.concurrent.Executors RunnableAdapter.call美元(Executors.java: 462)java.util.concurrent.FutureTask.run (FutureTask.java: 266)java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1167)java.util.concurrent.ThreadPoolExecutor Worker.run美元(ThreadPoolExecutor.java: 641)java.lang.Thread.run (Thread.java: 919){cmp=com.netafim.tech_app/com.amazonaws.mobileconnectors.s3.transferutility.TransferService}: app is in background uid UidRecord{e945dd1 u0a281 TRNB bg:+1m5s172ms idle change:idle procs:1 seq(0,0,0)}android.app.ContextImpl.startServiceCommon (ContextImpl.java: 1616)android.app.ContextImpl.startService (ContextImpl.java: 1571)android.content.ContextWrapper.startService (ContextWrapper.java: 669)com.amplifyframework.storage.s3.service.AWSS3StorageService.startServiceIfNotAlreadyStarted (AWSS3StorageService.java: 226)com.amplifyframework.storage.s3.service.AWSS3StorageService.listFiles (AWSS3StorageService.java: 157)在开始$ 0 $美元com.amplifyframework.storage.s3.operation.AWSS3StorageListOperation.lambda AWSS3StorageListOperation (AWSS3StorageListOperation.java: 91)$$Lambda$AWSS3StorageListOperation$h_rYgEkUSCQ04HohVqKR6853m80.run(来源未知:2)java.util.concurrent.Executors RunnableAdapter.call美元(Executors.java: 462)java.util.concurrent.FutureTask.run (FutureTask.java: 266)java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1167)java.util.concurrent.ThreadPoolExecutor Worker.run美元(ThreadPoolExecutor.java: 641)在java.lang.Thread.run(Thread.java:919)

根据我的理解,发生异常是因为Amplify包试图在应用程序在后台启动服务。

目前,我在这两种情况下使用RxAmplify。是否有一个解决方案,仍然使用RxAmplify库?

一个简单的解决方案是在CoroutineWorker中使用setForeground()

它将为您启动前台服务,该服务可以运行超过10分钟。然后,该服务可以在后台启动AWS内部服务。测试并确认在生产中工作

请参阅:https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running

最新更新