请原谅新秀问题......
我有一个AsyncTask:
class DownloadWeather extends AsyncTask<String, Void, String>{
}
但我注意到有两种方法可以从中获取信息......即使用onPostExecute:
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
或者简单地从mainActivity中调用它:
json = downloadWeather.execute(url).get();
据我所知,AsyncTask的全部目的是保持用户界面的交互性...但是不会在MainActivity类中使用第二个选项导致UI丢失帧?如果是这样,为什么第二个选项甚至存在?
在同样的说明中......是否有一种简单的方法可以从onPostExecute方法调用位于MainActivity类中的函数?
答案 0 :(得分:2)
但是不会在MainActivity类中使用第二个选项 用户界面失去了框架?如果是这样,为什么第二个选项甚至 存在?
虽然AsyncTask的主要目的是促进UI线程的正确使用和执行后台操作,但可能会有一些使用get()
的用例。
由于对这个问题的回答可能有点武断,你可能不同意我的回答,但有些用例get()
可能如下:
可能存在这样的情况,您希望将AsyscTask
用作单个任务或捆绑其他任务:
考虑一个场景,您必须根据ID下载一些数据。 Ids和数据的API是不同的。您需要使用一个API来下载ID和一个API来下载数据。您可以创建一个包装器,使用IdDownloadTask.get()
和DataDownloadtask.get()
来确保顺序加载。
如果ID可用,那么您可以直接exectue DataDownloadTask.execute()
。
您还可以在测试套件中使用get()
来创建测试,以分析您的网络API所用的往返时间。
可能存在多线程情况,在继续执行之前,AsyncTask
的输出对此线程至关重要。
Android公开的其他几个API很少使用,但有特殊要求的人可能需要它们。我认为谷歌需要冗长,以满足开发人员需求的需求,因为修改几个琐碎的用例可能会很昂贵。