重复使用同一个 AsyncTask 的最佳解决方案?
Optimal solution for utilizing the same AsyncTask repeatedly?
我知道一个 AsyncTask 只能 运行 一次。我知道解决这个问题的方法,但我需要一个来自使用复杂(?)进程的 AsyncTask 的变量。这是我调用 AsyncTask
的代码
val thr=NewTask()
thr.delegate = this
button.setOnClickListener {
thr.execute()
}
NewTask.doOnBackground() 只是将请求发送到 URL 的普通方法。 onPostExecute() 有点不同:
public override fun onPostExecute(result: String?) {
//super.onPostExecute(result)
delegate!!.processFinish(result!!)
}
委托是 AsyncResponse 的变量?这是一个包含 processFinish 抽象方法的接口,它接受一个字符串并且不返回任何内容。
我的问题是,我怎样才能重复 运行 AsyncTask 同时仍然得到响应?提前致谢。
最后,我决定使用协程。协程易于使用,比 AsyncTask 简单得多。我不知道为什么我害怕他们。这是我使用的代码:
class CoRoutine{
suspend fun httpGet(url: String = "https://boogle.org"): String {
val arr = ArrayList<String>()
withContext(Dispatchers.IO) {
val url = URL(url)
with(url.openConnection() as HttpURLConnection) {
requestMethod = "GET" // optional default is GET
//arr.add(responseCode)
inputStream.bufferedReader().use {
it.lines().forEach { line ->
//println(line)
arr.add(line as String)
}
}
}
}
return arr.get(0)
}
}
我知道一个 AsyncTask 只能 运行 一次。我知道解决这个问题的方法,但我需要一个来自使用复杂(?)进程的 AsyncTask 的变量。这是我调用 AsyncTask
的代码val thr=NewTask()
thr.delegate = this
button.setOnClickListener {
thr.execute()
}
NewTask.doOnBackground() 只是将请求发送到 URL 的普通方法。 onPostExecute() 有点不同:
public override fun onPostExecute(result: String?) {
//super.onPostExecute(result)
delegate!!.processFinish(result!!)
}
委托是 AsyncResponse 的变量?这是一个包含 processFinish 抽象方法的接口,它接受一个字符串并且不返回任何内容。
我的问题是,我怎样才能重复 运行 AsyncTask 同时仍然得到响应?提前致谢。
最后,我决定使用协程。协程易于使用,比 AsyncTask 简单得多。我不知道为什么我害怕他们。这是我使用的代码:
class CoRoutine{
suspend fun httpGet(url: String = "https://boogle.org"): String {
val arr = ArrayList<String>()
withContext(Dispatchers.IO) {
val url = URL(url)
with(url.openConnection() as HttpURLConnection) {
requestMethod = "GET" // optional default is GET
//arr.add(responseCode)
inputStream.bufferedReader().use {
it.lines().forEach { line ->
//println(line)
arr.add(line as String)
}
}
}
}
return arr.get(0)
}
}