【发布时间】:2018-02-22 21:15:19
【问题描述】:
基于Android开发者文档网页AsyncTask、Thread,可以向AsyncTask的线程发送cancel()请求。尽管我已经发送了取消请求并且它成功了,但线程仍在运行。有什么停止执行的想法吗?
button.setOnClickListener {
Log.i(TAG, asyncTaskObj.status) // RUNNING
if (asyncTaskObj.status == AsyncTask.Status.RUNNING) {
asyncTaskObj.cancel(true)
Log.i(TAG, asyncTaskObj.isCancelled) // True
}
Log.i(TAG, asyncTaskObj.status) // RUNNING
}
另外,有没有比AsyncTask 更简单的替代方法,让我们重新开始执行线程? (显然无法重启AsyncTaskQ&A-2)
还有一件事,我已经阅读了以下问题Q&A-1,Q&A-2。但是,答案对我不起作用。例如,没有isRunning 变量。
附:我的代码在 Kotlin 中。请用 Java 或 Kotlin 分享您的想法。
【问题讨论】:
-
"有停止执行的想法吗?" -- 你正在停止执行。但是,您假设
cancel()同步发生,getStatus()将立即返回不同的值。getStatus()在cancel()返回时肯定还没有更新,基于the source code。