Android AsyncTask用法介绍
2015-05-29 11:44
573 查看
1>界面设计
1.1>效果
![](http://img.blog.csdn.net/20150529124848535)
1.2>布局文件
其中strings.xml文件内容为:
2>AsyncTask代码如下:
运行后效果如下:
![](http://img.blog.csdn.net/20150529125340132)
3>运行的Log日志如下:
分析:从以上Log日志可以知道,MyAsyncTask中的方法doInBackground方法运行在后台线程中,而onProgressUpdate方法和onPostExecute方法是运行在GUI线程中的。
1.1>效果
1.2>布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.demo.asynctastdemo.MainActivity" > <Button android:id="@+id/start_bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/start_bt_txt"/> <TextView android:id="@+id/progress_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/progess_tv_txt" /> <TextView android:id="@+id/result_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/result_tv_txt"/> </LinearLayout>
其中strings.xml文件内容为:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">AsyncTastDemo</string> <string name="action_settings">Settings</string> <string name="progess_tv_txt">Progess Text</string> <string name="result_tv_txt">Result Text</string> <string name="start_bt_txt">Start</string> </resources>
2>AsyncTask代码如下:
package com.cxc.asynctaskdemo2; import android.R.string; import android.os.AsyncTask; import android.util.Log; import android.widget.TextView; public class MyAsyncTask extends AsyncTask<String, Integer, String> { private static final String TAG="MyAsyncTask"; //声明控件 private TextView progess_tv; private TextView result_tv; public MyAsyncTask(TextView progess_tv, TextView result_tv) { super(); this.progess_tv = progess_tv; this.result_tv = result_tv; } /** * 生成该类的对象,并调用execute方法之后 * 首先执行的是onProExecute方法 * 其次执行doInBackgroup方法 */ @Override protected String doInBackground(String... params) {// 此方法将会在后台线程中执行 // TODO Auto-generated method stub Log.d(TAG,"----doInBackground()---thread id:"+Thread.currentThread().getId()); String resultString = ""; int myProgress = 0; int inputLength = params[0].length(); for (int i = 0; i < inputLength; i++) { myProgress = i; resultString += params[0].charAt(i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d(TAG,"Thread :"+Thread.currentThread().getId()+"----send:"+myProgress); publishProgress(myProgress); } return resultString;// 返回一个值,它将传递给onPostExecute() } /** * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI控件进行操作 */ @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); Log.d(TAG,"----onPostExecute()---thread id:"+Thread.currentThread().getId()+"---reciver:"+result); // 和UI线程同步 this.result_tv.setText(result); } /** * 这里的Integer参数对应AsyncTask中的第二个参数 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作 */ @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); Log.d(TAG,"----onProgressUpdate()---thread id:"+Thread.currentThread().getId()); Log.d(TAG,"Thread :"+Thread.currentThread().getId()+"----reciver:"+values[0]); // 和UI线程同步 this.progess_tv.setText(values[0].toString()); } }
运行后效果如下:
3>运行的Log日志如下:
06-02 09:44:34.690: D/MyAsyncTask(29285): ----main thread --id:1 06-02 09:44:49.160: D/MyAsyncTask(29285): ----doInBackground()---thread id:5293 06-02 09:44:50.165: D/MyAsyncTask(29285): Thread :5293----send:0 06-02 09:44:50.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:50.165: D/MyAsyncTask(29285): Thread :1----reciver:0 06-02 09:44:51.165: D/MyAsyncTask(29285): Thread :5293----send:1 06-02 09:44:51.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:51.165: D/MyAsyncTask(29285): Thread :1----reciver:1 06-02 09:44:52.165: D/MyAsyncTask(29285): Thread :5293----send:2 06-02 09:44:52.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:52.165: D/MyAsyncTask(29285): Thread :1----reciver:2 06-02 09:44:53.170: D/MyAsyncTask(29285): Thread :5293----send:3 06-02 09:44:53.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:53.170: D/MyAsyncTask(29285): Thread :1----reciver:3 06-02 09:44:54.165: D/MyAsyncTask(29285): Thread :5293----send:4 06-02 09:44:54.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:54.170: D/MyAsyncTask(29285): Thread :1----reciver:4 06-02 09:44:55.170: D/MyAsyncTask(29285): Thread :5293----send:5 06-02 09:44:55.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:55.170: D/MyAsyncTask(29285): Thread :1----reciver:5 06-02 09:44:56.175: D/MyAsyncTask(29285): Thread :5293----send:6 06-02 09:44:56.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:56.175: D/MyAsyncTask(29285): Thread :1----reciver:6 06-02 09:44:57.175: D/MyAsyncTask(29285): Thread :5293----send:7 06-02 09:44:57.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:57.175: D/MyAsyncTask(29285): Thread :1----reciver:7 06-02 09:44:58.175: D/MyAsyncTask(29285): Thread :5293----send:8 06-02 09:44:58.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:58.175: D/MyAsyncTask(29285): Thread :1----reciver:8 06-02 09:44:59.175: D/MyAsyncTask(29285): Thread :5293----send:9 06-02 09:44:59.180: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:59.180: D/MyAsyncTask(29285): Thread :1----reciver:9 06-02 09:45:00.185: D/MyAsyncTask(29285): Thread :5293----send:10 06-02 09:45:00.185: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:00.185: D/MyAsyncTask(29285): Thread :1----reciver:10 06-02 09:45:01.185: D/MyAsyncTask(29285): Thread :5293----send:11 06-02 09:45:01.185: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:01.185: D/MyAsyncTask(29285): Thread :1----reciver:11 06-02 09:45:02.190: D/MyAsyncTask(29285): Thread :5293----send:12 06-02 09:45:02.190: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:02.190: D/MyAsyncTask(29285): Thread :1----reciver:12 06-02 09:45:03.190: D/MyAsyncTask(29285): Thread :5293----send:13 06-02 09:45:03.190: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:03.190: D/MyAsyncTask(29285): Thread :1----reciver:13 06-02 09:45:04.190: D/MyAsyncTask(29285): Thread :5293----send:14 06-02 09:45:04.195: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:04.195: D/MyAsyncTask(29285): Thread :1----reciver:14 06-02 09:45:05.200: D/MyAsyncTask(29285): Thread :5293----send:15 06-02 09:45:05.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:05.200: D/MyAsyncTask(29285): Thread :1----reciver:15 06-02 09:45:06.200: D/MyAsyncTask(29285): Thread :5293----send:16 06-02 09:45:06.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:06.200: D/MyAsyncTask(29285): Thread :1----reciver:16 06-02 09:45:07.205: D/MyAsyncTask(29285): Thread :5293----send:17 06-02 09:45:07.205: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:07.205: D/MyAsyncTask(29285): Thread :1----reciver:17 06-02 09:45:08.200: D/MyAsyncTask(29285): Thread :5293----send:18 06-02 09:45:08.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:08.205: D/MyAsyncTask(29285): Thread :1----reciver:18 06-02 09:45:09.205: D/MyAsyncTask(29285): Thread :5293----send:19 06-02 09:45:09.205: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:09.205: D/MyAsyncTask(29285): Thread :1----reciver:19 06-02 09:45:10.215: D/MyAsyncTask(29285): Thread :5293----send:20 06-02 09:45:10.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:10.215: D/MyAsyncTask(29285): Thread :1----reciver:20 06-02 09:45:11.210: D/MyAsyncTask(29285): Thread :5293----send:21 06-02 09:45:11.210: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:11.210: D/MyAsyncTask(29285): Thread :1----reciver:21 06-02 09:45:12.215: D/MyAsyncTask(29285): Thread :5293----send:22 06-02 09:45:12.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:12.215: D/MyAsyncTask(29285): Thread :1----reciver:22 06-02 09:45:13.215: D/MyAsyncTask(29285): Thread :5293----send:23 06-02 09:45:13.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:13.215: D/MyAsyncTask(29285): Thread :1----reciver:23 06-02 09:45:14.215: D/MyAsyncTask(29285): Thread :5293----send:24 06-02 09:45:14.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:14.215: D/MyAsyncTask(29285): Thread :1----reciver:24 06-02 09:45:15.215: D/MyAsyncTask(29285): Thread :5293----send:25 06-02 09:45:15.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:15.215: D/MyAsyncTask(29285): Thread :1----reciver:25 06-02 09:45:16.215: D/MyAsyncTask(29285): Thread :5293----send:26 06-02 09:45:16.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:16.215: D/MyAsyncTask(29285): Thread :1----reciver:26 06-02 09:45:17.215: D/MyAsyncTask(29285): Thread :5293----send:27 06-02 09:45:17.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:17.215: D/MyAsyncTask(29285): Thread :1----reciver:27 06-02 09:45:18.220: D/MyAsyncTask(29285): Thread :5293----send:28 06-02 09:45:18.220: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:18.220: D/MyAsyncTask(29285): Thread :1----reciver:28 06-02 09:45:19.220: D/MyAsyncTask(29285): Thread :5293----send:29 06-02 09:45:19.220: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:19.220: D/MyAsyncTask(29285): Thread :1----reciver:29 06-02 09:45:20.225: D/MyAsyncTask(29285): Thread :5293----send:30 06-02 09:45:20.225: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:20.225: D/MyAsyncTask(29285): Thread :1----reciver:30 06-02 09:45:21.225: D/MyAsyncTask(29285): Thread :5293----send:31 06-02 09:45:21.225: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:21.225: D/MyAsyncTask(29285): Thread :1----reciver:31 06-02 09:45:21.225: D/MyAsyncTask(29285): ----onPostExecute()---thread id:1---reciver:ABCDEFGHIJKLMNOPQRSTUVWXYZ...ABC
分析:从以上Log日志可以知道,MyAsyncTask中的方法doInBackground方法运行在后台线程中,而onProgressUpdate方法和onPostExecute方法是运行在GUI线程中的。
相关文章推荐
- Android addView动态给Activity添加View组件
- android Smali静态分析(二)
- Android-->检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播
- arcgis android 中shapefile的加载
- Android DiskLruCache完全解析,硬盘缓存的最佳方案 --转载
- Android Annotations框架第1篇-环境搭建
- Android 自定义属性(attrs.xml,TypedArray)
- Android 抽屉效果的导航菜单实现
- arcgis android 10.2.5开发环境配置
- Android 5.0 双卡信息管理分析
- 优化Android应用内存的若干方法
- Android导入AS工程
- Android Studio v1.0安装教程(Windows)
- Android Canvas 说明
- 【Android】【ANR】如何分析解决Android ANR
- 【Android】【ANR】如何分析解决Android ANR
- 【Android】【ANR】如何分析解决Android ANR
- 【Android】【ANR】如何分析解决Android ANR
- 【Android】【ANR】如何分析解决Android ANR
- 【Android】【ANR】如何分析解决Android ANR