Android 是否有AsyncTask的替代方案或如何重新启动AsyncTask?
基于Android开发者的文档网页,可以将Android 是否有AsyncTask的替代方案或如何重新启动AsyncTask?,android,android-asynctask,Android,Android Asynctask,基于Android开发者的文档网页,可以将cancel()请求发送到AsyncTask的线程。虽然我已经发送了取消请求并且成功了,但是线程仍然在运行。有停止死刑的想法吗 button.setOnClickListener { Log.i(TAG, asyncTaskObj.status) // RUNNING if (asyncTaskObj.status == AsyncTask.Status.RUNNING) {
cancel()
请求发送到AsyncTask
的线程。虽然我已经发送了取消请求并且成功了,但是线程仍然在运行。有停止死刑的想法吗
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
,还有什么简单的替代方法吗?(显然无法重新启动AsyncTask
)
还有一件事,我读了以下问题。然而,这些答案对我来说并不适用。例如,没有isRunning
变量
另外,我的密码是Kotlin。请在Java或Kotlin中分享您的想法。像这样安全地从外部立即取消线程是不可能的。您不知道它可能正在运行什么操作,线程可能持有什么锁,等等。因此,取消实际上不会立即停止线程。它设置一个标志,AsyncTask的任务是检查标志并通过从doInBackground返回来结束自身。不要假设任何被取消的线程或任务会立即停止运行。如果您的代码需要这样做,则需要修复代码
至于重新启动-从头开始?使用相同的参数创建AsyncTask的新实例。从你停下来的地方开始?你可以用两种方法来做,但这需要很多工作。AsyncTask不适合这样做,因为它的线程是所有任务之间的共享资源,因此您需要使用实际的线程。不可能像这样安全地从外部立即取消线程。您不知道它可能正在运行什么操作,线程可能持有什么锁,等等。因此,取消实际上不会立即停止线程。它设置一个标志,AsyncTask的任务是检查标志并通过从doInBackground返回来结束自身。不要假设任何被取消的线程或任务会立即停止运行。如果您的代码需要这样做,则需要修复代码
至于重新启动-从头开始?使用相同的参数创建AsyncTask的新实例。从你停下来的地方开始?你可以用两种方法来做,但这需要很多工作。AsyncTask不适用于此,因为它的线程是所有任务之间的共享资源,因此您需要使用实际的线程来完成此任务。“有没有停止执行的想法?”--您正在停止执行。但是,您假设
cancel()
同步发生,并且getStatus()
将立即返回不同的值<代码>getStatus()在cancel()
返回时肯定还没有更新,基于。“有没有停止执行的想法?”--您正在停止执行。但是,您假设cancel()
同步发生,并且getStatus()
将立即返回不同的值getStatus()
根据返回的时间cancel()
肯定还没有更新。