#异步加载
原因 1.android单线程模型
2.耗时操作阻碍UI线程
##实现方式
多线程|线程池
AsyncTask
##AsyncTask使用方式
1.写一个类(例 MyAsyncTask)继承抽象类AsyncTask
2.实现需要实现的方法
3.调用方法执行任务,new MyAsyncTask().execute("");
##AsyncTask的泛型参数 AsyncTask<Params, Progress, Result>
Params:启动任务时输入参数的类型
Progress:后台执行任务中返回进度值的类型
Result:后台执行任务完成后返回结果的类型
##构建AsyncTask子类的回调方法
doInBackground:在子线程中执行的任务,必须重写的方法
onPostExecute:在主线程中执行,任务执行完成后调用
onPreExecute:在主线程中执行,完成执行异步任务前的初始化工作
onProgressUpdate:在doInBackground()方法中调用 publishProgress()更新任务的执行进度后,就会触发该方法。
##AsyncTask中其他常用方法
getStatus():得到任务执行的状态(未执行,执行中,执行完)
cancel():只是发送一个取消任务的消息,但任务不会取消
isCancelled():判断任务是否被取消,可以在回调方法中做出相应的操作
##优点
易于使用(子线程和主线程切换),底层封装了handler和线程池
##缺点
1.对于优先级不同的任务,不能按优先级执行
2.如果同时给太多的任务去执行,队列会爆
3.对于(<19)的版本上,最大线程数为128,占用资源较多
##注意事项
1.每个AsyncTask对象只能被执行一次
2.必须在UI线程中执行execute
3.处理简单的数据可以使用,复杂的还是使用多线程|线程池。
原因 1.android单线程模型
2.耗时操作阻碍UI线程
##实现方式
多线程|线程池
AsyncTask
##AsyncTask使用方式
1.写一个类(例 MyAsyncTask)继承抽象类AsyncTask
2.实现需要实现的方法
3.调用方法执行任务,new MyAsyncTask().execute("");
##AsyncTask的泛型参数 AsyncTask<Params, Progress, Result>
Params:启动任务时输入参数的类型
Progress:后台执行任务中返回进度值的类型
Result:后台执行任务完成后返回结果的类型
##构建AsyncTask子类的回调方法
doInBackground:在子线程中执行的任务,必须重写的方法
onPostExecute:在主线程中执行,任务执行完成后调用
onPreExecute:在主线程中执行,完成执行异步任务前的初始化工作
onProgressUpdate:在doInBackground()方法中调用 publishProgress()更新任务的执行进度后,就会触发该方法。
##AsyncTask中其他常用方法
getStatus():得到任务执行的状态(未执行,执行中,执行完)
cancel():只是发送一个取消任务的消息,但任务不会取消
isCancelled():判断任务是否被取消,可以在回调方法中做出相应的操作
##优点
易于使用(子线程和主线程切换),底层封装了handler和线程池
##缺点
1.对于优先级不同的任务,不能按优先级执行
2.如果同时给太多的任务去执行,队列会爆
3.对于(<19)的版本上,最大线程数为128,占用资源较多
##注意事项
1.每个AsyncTask对象只能被执行一次
2.必须在UI线程中执行execute
3.处理简单的数据可以使用,复杂的还是使用多线程|线程池。