进度条在 Redux 事件后不更新

Progressbar not updating after Redux Event

我知道这里经常有人问这个问题,但没有一个答案对我有帮助。

我正在编写一个具有拇指再生功能的图库应用程序。为了显示进度,我添加了进度条,它应该计算创建的缩略图的数量。每次完成缩略图生成后,我都会发送一个 Redux 事件并在我的 Fragement 中收听它,以更改进度条。

正在生成所有可见的所有缩略图photos/videos

private fun onMenuRefreshThumbs(activity: Activity) {
    val mediaPath = Redux.store.currentState.mediaPath
    val fileRepository = FileRepository(context = activity, mediaPath = mediaPath)
    activity.runOnUiThread {
        fileRepository.regenerateThumbs(activity)
    }
}

上面使用的FileRepository里面的函数:

fun regenerateThumbs(context: Context) {
    val success = File(getAbsoluteThumbsDir(context, mediaPath)).deleteRecursively()
    getMediaItems()
}

fun getMediaItems(): MediaItemList {
    val success = File(thumbPath).mkdirs()
    val isThumbsEmpty = File(thumbPath).listFiles().isEmpty()
    val mediaFileList = File(mediaPath).listFiles().
.sortedByDescending { it.lastModified() }
    val list = MediaItemList()
    mediaFileList.apply {
        forEach {
            list.add(MediaItem(it.name, 0, 0))
            if (isThumbsEmpty) {
                getOrCreateThumb(it)
                Redux.store.dispatch(FileUpdateAction(it))
            }
        }
    }
    return list
}

在 Fragement 中订阅 Redux:

private fun subscribeRedux() {
    val handler = Handler(Looper.getMainLooper())
    val activity = requireActivity()
    subscriber = { state: AppState ->            
        when (state.action) {
            ...

            is ClearSelection -> {
                progressCounter = 0
//              fragment_gallery_progress.visibility = View.GONE
            }
            is FileUpdateAction -> {
                Handler().post {
                    progressCounter++
                    fragment_gallery_progress.visibility = View.VISIBLE
                    fragment_gallery_progress.progress = progressCounter
//                  fragment_gallery_progress.invalidate()
                    log.d("test: Thumb Index $progressCounter ${state.action.mediaItem.name} was created")
                }
                Unit
            }
        }
    }.apply {
        Redux.store.subscribe(this)
    }
}

我在这两种情况下都尝试了调用线程的所有不同版本。但无论是通过处理程序还是通过 activity.runOnUiThread 完成,进度条都不会改变,直到所有拇指都完成并且进度条从 0 跳到最大数字。我可以看到在正确时间写入的日志,但进度条没有变化。

我可以通过以下步骤解决我的问题:

删除 runOnUiThread() 调用

private fun onMenuRefreshThumbs(activity: Activity) {
    val mediaPath = Redux.store.currentState.mediaPath
    val fileRepository = FileRepository(context = activity, mediaPath = mediaPath)
    fileRepository.regenerateThumbs(activity)
}

为每个 Thumbs-Generation 添加一个线程:

fun getMediaItems(): MediaItemList {
    val success = File(thumbPath).mkdirs()
    val isThumbsEmpty = File(thumbPath).listFiles().isEmpty()
    val mediaFileList = File(mediaPath).listFiles().
    .sortedByDescending { it.lastModified() }
    val list = MediaItemList()
    mediaFileList.apply {
        forEach {
            list.add(MediaItem(it.name, 0, 0))
            if (isThumbsEmpty) {
                Thread {
                    getOrCreateThumb(it)
                    Redux.store.dispatch(FileUpdateAction(it))
                }.start()
            }
        }
  ...