小编Pew*_*chu的帖子

WorkManager - 可以更改 WorkRequest 重试的最大退避时间吗?

我正在使用 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(),并为请求添加初始延迟,但我认为无法自定义重试的最大退避时间。这是设计使然,还是我只是瞎了眼?

android android-workmanager

5
推荐指数
0
解决办法
286
查看次数

Android - ImageView 的不同scaleType 之间的共享元素转换无法正确动画(使用Glide)

请注意,这个问题与此处找到的问题非常相似。没有解决方案,所以我想我应该提供一些代码并再次询问。

本质上,我试图在两个片段之间进行 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)

animation android shared-element-transition android-glide

5
推荐指数
1
解决办法
1218
查看次数