对异步任务加载网络数据的回答:
在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Params、Progress和Result,分别表示请求的参数、任务的进度和获得的结果数据。
我之前总结了使用异步任务的原因有三点:
1)是因为AsyncTask使用了线程池技术,而且其中的方法很容易实现调用
2)是因为AsyncTask可以调用相关的方法,在开启子线程前和后,进行界面的更新
3)是因为一旦任务多了,不用每次都new新的线程,可以直接使用
如果我们查看官方文档,异步任务中的方法的执行顺序是这样的:
onPreExecute()【执行前开启】--- > doInBackground() --- > onProgressUpdate() --- > onPostExecute()
具体的来说,当一个异步任务开启后:
首先会调用onPreExecute()方法:
这个方法在异步执行时立即被UI线程调用,这一步通常用来设置任务,作为任务加载的准备工作。通常会在这个方法中弹出一个提示框,提示用户加载的进度。
第二个方法doInBackground():
这个方法是执行在子线程中的。在onPreExecute()执行完后,会立即开启这个方法,在方法中可以执行耗时的操作。需要将请求的参数传递进来,发送给服务器,并将获取到的数据返回,数据会传给最后一步中;这些值都将被放到主线程中,也可以不断的传递给下一步的onPr