在android4.0以后的版本中,为了使得主界面流畅,所以设置了不允许在主线程中访问网络,为了安全,又不允许在其它线程中访问控件,这样就造成了ImageView等需要使用网络的控件更新时的问题,本文以使用AsyncTask的方式实现了异步更新UI界面.
相关文章:Android中使用Handler+Runnable异步更新UI界面
AsyncTask介绍
AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类。AsyncTask的内部实现是一个线程池,每个后台任务会提交到线程池中的线程执行,然后使用Thread+Handler的方式调用回调函数。
AsyncTask中最重要的两个方法就是doInBackground和onPostExecute,doInBackground为程序在后台执行的操作,一但执行完毕,就立即调用onPostExecute,而onPostExecute是在UI线程中执行的,就可以更新UI界面了。其中,doInBackground的返回值将作为参数传递给onPostExecute。
例子
下面是一个获取网络图片显示在ImageView上的例子。
MainActivity.java
activity_main.xml
效果
其中,代码的51~66行就是在后台异步的加载图片的。而72~77行则是在UI线程中执行,更新界面。