今天总结的是android中的异步加载AsyncTask。android的UI线程(主线程)主要负责处理用户的按键事件、用户触屏事件及屏幕绘图事件等,因此开发者的其他操作不应该、也不能阻塞UI线程,否者UI界面将会出现停止响应的状况。
为了避免UI线程失去响应的问题,android将耗时操作放在了新线程中完成,但是新线程也可能需要动态更新UI组件:比如需要从网上获取网页,然后在TextView中将其源代码显示出来,此时就应该将连接网络、获取网络数据的操作放在新线程中完成。
AsyncTask<params,progress,result>是一个抽象类,通常被继承。其中有三个参数需要指定。params:启动任务执行的输入参数的类型。progress:后台任务完成的进度值的类型。result:后台执行任务完成后返回结果的类型。
使用AsyncTask的三个步骤:
1、创建AsyncTask子类,指定三个泛型参数,如果某个泛型参数不需要返回值的则可指定为Void。注意:AsyncTask子类一般都是UI主线程(Activity)中的内部类。
2、根据需要实现AsyncTask类的方法。
3、实例化AsyncTask子类,调用excute();方法开始耗时操作。
示例代码:
public class MyAsyncTaskActivity extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate();
setContentView(R.layout.main);
MyAsyncTask mMyAsncTask=new MyAsyncTask;
mMyAsyncTask.execute();
}
class MyAsyncTask extends AsyncTask<URL,Integer,String>{
procted String doInBackground(URL[] params){
}
protected void onProExecute(){
}
protected void onPostExecute(String s){
}
protected void onProgressUpdate(Integer valus){
}
}
}