我正在使用 WorkManager 将 OneTimeWorkRequests 排队以进行文件上传。这当然需要网络连接,如果设备没有连接并且上传失败,它将按照我指定的重试/退避策略重试。
我的问题很简单:
我可以更改重试的最大退避时间吗?
默认情况下,最大退避时间设置为 5 小时,理想情况下,我想减少这一点,但我一直找不到这样做的方法。
请参阅我的代码以将工作请求排队如下:
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
OneTimeWorkRequest uploadRequest = new OneTimeWorkRequest.Builder(UploadFileWorker.class)
.setInputData(createInputDataForUri(file.getPath()))
.setConstraints(constraints)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL,
OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS)
.build();
workManager.enqueueUniqueWork(UNIQUE_WORK_FILE_UPLOAD, ExistingWorkPolicy.APPEND, uploadRequest);
Run Code Online (Sandbox Code Playgroud)
我们可以使用 轻松设置 BackoffPolicy(线性/指数)和 backoffDelay .setBackoffCriteria(),并为请求添加初始延迟,但我认为无法自定义重试的最大退避时间。这是设计使然,还是我只是瞎了眼?
请注意,这个问题与此处找到的问题非常相似。没有解决方案,所以我想我应该提供一些代码并再次询问。
本质上,我试图在两个片段之间进行 ImageView 的共享元素转换。我的最终目标是制作一个看起来与默认图片库非常相似的动画。重要的一点是我使用 Glide 来加载图像。我遇到的问题是我无法让scaleType 平滑地进行动画处理(从centerCrop 到fitCenter)。
我有一个包含 RecyclerView 的片段,其每个项目都包含一个 ImageView。这些 ImageView 是缩略图,XML 如下所示:
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/large_spacing"
android:scaleType="centerCrop"/>
Run Code Online (Sandbox Code Playgroud)
重要/有问题的部分是scaleType="centerCrop"
我使用以下命令设置转换名称并在 RecyclerView 适配器中加载图像:
holder.ivPhoto.setTransitionName(current.getPhotoFilepath());
Glide.with(holder.ivPhoto.getContext())
.load(current.getPhotoFilepath())
.dontTransform()
.into(holder.ivPhoto);
Run Code Online (Sandbox Code Playgroud)
单击某个项目时,将运行以下代码:
@Override
public void onItemClicked(AssetDetail assetDetail, ImageView imageView) {
if (assetDetail.getPhotoFilepath() != null) {
AssetDetailFragmentDirections.ActionAssetDetailFragmentToDisplayImageFragment action = AssetDetailFragmentDirections.actionAssetDetailFragmentToDisplayImageFragment(assetDetail.getPhotoFilepath());
FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
.addSharedElement(imageView, assetDetail.getPhotoFilepath())
.build();
NavHostFragment.findNavController(this).navigate(action, extras);
}
}
Run Code Online (Sandbox Code Playgroud)
这将带您到第二个片段,它基本上只包含以下 ImageView(技术上是 PhotoView,我也尝试过使用普通 ImageView):
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/ivImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
Run Code Online (Sandbox Code Playgroud)
我推迟输入转换并设置我想要使用的转换:
@Override …Run Code Online (Sandbox Code Playgroud)