gpt4 book ai didi

Android AsyncTask 没有更新进度条

转载 作者:行者123 更新时间:2023-11-29 18:46:40 24 4
gpt4 key购买 nike

你好,我有一个关于 asynctask 的问题。我播放了一首歌,然后我更新了进度条的持续时间。但是当我播放一首新歌时,进度条不会回到第 0 个位置,并且进度条会继续使用旧值这是我的代码:

class Task(context: Context, progressBar: ProgressBar) : AsyncTask<Int, Int, String>() {
@SuppressLint("StaticFieldLeak")
private var progressBar: ProgressBar? = progressBar
private var count = 0
override fun doInBackground(vararg input: Int?): String {
while (count <= input[0]!!) {
count++
publishProgress(count)
Thread.sleep(1000)
if (isCancelled){
count=0
}
}
return "Task completed"
}

override fun onPreExecute() {
progressBar!!.progress = 0
}

override fun onProgressUpdate(vararg values: Int?) {
progressBar!!.progress = values[0]!!
}
}

当我播放歌曲时:

    override fun onItemClicked(position: Int, song: Song) {
val secondsDuration = song.duration!! / 1000
activity!!.pgbSong.max = secondsDuration
val task = Task(context!!, activity!!.pgbSong)
if (task.status == AsyncTask.Status.RUNNING) {
task.cancel(true)
}
task.execute(song.duration)
}

最佳答案

好吧,说什么 - 你永远不会取消以前的异步任务。因为你每次都在刚刚创建的异步任务上调用 cancel(true):

val task = Task(context!!, activity!!.pgbSong)
if (task.status == AsyncTask.Status.RUNNING) {
task.cancel(true)
}
task.execute(song.duration)

相反,您应该将之前的异步任务保存在一个对象变量中(像这样):

private var asyncTask : AsyncTask<*,*,*>? = null

在方法调用之后:

override fun onItemClicked(position: Int, song: Song) {
if (asyncTask.status == AsyncTask.Status.RUNNING) {
asyncTask.cancel(true)
}

val secondsDuration = song.duration!! / 1000
activity!!.pgbSong.max = secondsDuration
asyncTask = Task(context!!, activity!!.pgbSong)
asyncTask.execute(song.duration)
}

而且,我想,当您检查它是否取消时,您应该在 AsyncTask 中执行 return

但是请不要以这种方式使用AsyncTask。因为它包含链接 View 和 Activity ,可以防止这些 View 和 Activity 被垃圾收集,从而导致内存泄漏。

请不要在 Kotlin 中使用 !!。而是使用 null 检查或在 null 时提供默认值。示例:

val int = object?.int ?: 0
val context = activity ?: return
val view = activity?.pgbSong ?: return // or if (view != null)

关于Android AsyncTask 没有更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51631998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com