Android之AsyncTask异步加载

来源:互联网 发布:腾讯数据库有多大 编辑:程序博客网 时间:2024/05/20 04:47
今天总结的是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);        //实例化AsyncTask类。        MyAsyncTask mMyAsncTask=new MyAsyncTask;        //实例化的对象调用execute()方法开始执行耗时操作。        mMyAsyncTask.execute();    }  //创建AsyncTask类的子类,指定三个泛型参数的类型,实现AsyncTask类的方法。    class MyAsyncTask extends AsyncTask<URL,Integer,String>{    //doInBackground()方法就是后台将要完成的任务,failed方法可以调用publishProgress(Progress values)方法更新新任务的执行进度。    procted String doInBackground(URL[] params){        }        //onProExecute()方法在执行后台耗时操作之前调用,主要完成一些初始化的准备工作,比如在界面上显示进度条。    protected void onProExecute(){        }        //onPostExecute()方法在执行完后台耗时操作后,系统会自动调用该方法,并将doInBackground()方法的返回值传给该方法。    protected void onPostExecute(String s){        }        //onProgressUpdate()在DoInBackground()方法中调用publishProgress()方法更新任务的执行进度后,会触发该方法。    protected void onProgressUpdate(Integer valus){        }    }}
0 0