Вернуть значение из AsyncTask в Android [дубликат]
На этот вопрос уже есть ответ здесь:
Как получить результат OnPostExecute () для основной деятельности, потому что AsyncTask является отдельным классом? 16 ответовОдин простой вопрос: возможно ли вернуть значение вAsyncTask
?
//AsyncTask is a member class
private class MyTask extends AsyncTask<Void, Void, Void>{
protected Void doInBackground(Void... params) {
//do stuff
return null;
}
@Override
protected void onPostExecute(Void result) {
//do stuff
//how to return a value to the calling method?
}
}
И тогда в моемActivity
/Fragment
:
// The task is started from activity
myTask.execute()
// something like this?
myvalue = myTask.getvalue()
РЕДАКТИРОВАТЬ: Это было задано давно, когда я не был знаком с Java, теперь, когда я лучше с ней, я сделаю краткое резюме:
Суть асинхронной задачи заключается в том, что задачаasynchronous
Это означает, что после того, как вы позвонитеexecute()
в задаче задача начинает выполняться в собственном потоке. возвращать значение из asynctask было бы бессмысленно, поскольку исходный вызывающий поток уже выполнял другие действия (таким образом, задача асинхронная).
Подумайте о времени: В какой-то момент вы запустили задачу, которая будет выполняться параллельно с основным потоком. Когда задача параллельного выполнения завершена, время в главном потоке также истекло. Параллельная задача не может вернуться назад во времени, чтобы вернуть значение в основной поток.
Я приехал из Си, поэтому я не знал об этом много. Но, похоже, у многих людей один и тот же вопрос, поэтому я решил немного прояснить его.