AsyncTask:是Android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操做,并提供接口反馈当前异步执行的程度(能够经过接口实现UI进度更新),最后反馈执行的结果给UI主线程。html
AsyncTask (异步任务),从字面上来讲,就是在咱们的UI主线程运行的时候,异步的完成一些操做。AsyncTask容许咱们的执行一个异步的任务在后台。咱们能够将耗时的操做放在异步任务当中来执行,并随时将任务执行的结果返回给咱们的UI线程来更新咱们的UI控件。经过AsyncTask咱们能够轻松的解决多线程之间的通讯问题。java
4个步骤:当咱们执行一个异步任务的时候,其须要按照下面的4个步骤分别执行android
一个超简单的理解 AsyncTask 的例子:AsyncTask来从网络上加载一张图片git
Activity代码:github
private Button btn; private ImageViewimageView; privateProgressDialog progressDialog; private final String IMGURL= "http://img0.pconline.com.cn/pconline/1206/18/2829090_3867bd63fd673471aa184c02_500.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.asynctask_img); btn=(Button)findViewById(R.id.buttonOnClicksAsyncTask); imageView =(ImageView)findViewById(R.id.imageViewss); progressDialog = newProgressDialog(this); progressDialog.setTitle("提示信息"); progressDialog.setMessage("正在下载中,请稍后......"); progressDialog.setCancelable(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); btn.setOnClickListener(newView.OnClickListener() { @Override public voidonClick(View v) { // 在UI Thread当中实例化AsyncTask对象,并调用execute方法 newMAsyncTask().execute(IMGURL); } }); } public class MAsyncTask extends AsyncTask<String, Integer, byte[]> { @Override protected voidonPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected byte[]doInBackground(String... params) { HttpClient httpClient = newDefaultHttpClient(); HttpGet httpGet = newHttpGet(params[0]); byte[] image =new byte[]{}; try { HttpResponse httpResponse =httpClient.execute(httpGet); HttpEntity httpEntity =httpResponse.getEntity(); if(httpEntity!= null &&httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { image = EntityUtils.toByteArray(httpEntity); } } catch(Exception e) { e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); } return image; } @Override protected voidonProgressUpdate(Integer... values) { super.onProgressUpdate(values); } @Override protected voidonPostExecute(byte[] result) { super.onPostExecute(result); // 将doInBackground方法返回的byte[]解码成要给Bitmap Bitmap bitmap = BitmapFactory.decodeByteArray(result,0, result.length); // 更新咱们的ImageView控件 imageView.setImageBitmap(bitmap); progressDialog.dismiss(); } } }
一个ImageView控件和一个Button控件,当点击Button控件时,弹出一个ProgressDialog,而后开启一个异步任务,从网络中下载一张图片,并更新到咱们的ImageView上。这里还要注意一点,若是咱们要访问网络,必须还要给其受权才行网络
AndroidManifest.xml文件:多线程
<uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
效果图:app
源码下载:异步
AndroidStudio下载: https://github.com/DickyQie/AsynTaskDemo.gitasync