`
wangleyiang
  • 浏览: 215393 次
社区版块
存档分类
最新评论

Android 使用AsyncTask更新UI

阅读更多

AsyncTask可以轻松容易的跟新UI,而开发者需要做的是在不同的回调函数中嵌入代码逻辑即可。关于Android中的线程相关内容,可以参考开发者网站:developer.android.com/guide/components/processes-and-threads.html

 

开发者网站对AsyncTask的说明已经很明确了,参考地址:http://developer.android.com/reference/android/os/AsyncTask.html,下面从代码角度看看实现过程:

  1. 继承AsyncTask,定义自己的异步任务;
  2. 在自定义AsyncTask中的回调函数中嵌入操作逻辑;
  3. 创建AsyncTask并执行;

主要代码:

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class RefreshUIActivity extends Activity implements OnClickListener {
    
	private TextView textView;
	private Button refreshButton;
	
	/**
	 * 标识异步任务
	 */
	private int identifier;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_PROGRESS);
		setProgressBarVisibility(true);
        
        setContentView(R.layout.main);
        
        textView = (TextView) findViewById(R.id.textView1);
        refreshButton = (Button) findViewById(R.id.button1);
        
        refreshButton.setOnClickListener(this);
        
    }

	@Override
	public void onClick(View v) {
		
		switch (v.getId()) {
		case R.id.button1:
			// 创建异步任务
			CustomizedAsyncTask task = new CustomizedAsyncTask(++identifier);
			task.execute("0", "25", "50", "75", "100");
			task = null;
			break;
		default:
			break;
		}
		
	}
	
	class CustomizedAsyncTask extends AsyncTask<String, Integer, String> {
		
		private String identifier;
		
		public CustomizedAsyncTask(int id) {
			identifier = "[" + id + "]";
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
			textView.append(identifier + "onCancelled\n");
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			textView.append(identifier + "onPostExecute result:" + result + "\n");
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			textView.append(identifier + "onPreExecute\n");
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			setProgress(values[0] * 100);
			textView.append(identifier + "onProgressUpdate Value: " + values[0] + "%\n");
		}

		@Override
		protected String doInBackground(String... params) {
			for (String param : params) {
				try {
					// 模拟费时操作
					Thread.sleep(2 * 1000);
					// 触发onProgressUpdate方法
					publishProgress(Integer.valueOf(param));
				} catch (Exception e) {
					e.printStackTrace();
				}
				System.out.println(param);
			}
			System.out.println(identifier + "doInBackground");
			return "Finished";
		}
		
	}
	
}

 说明:

  • 关于AsyncTask的各个回调函数就不做说明,参考开发者文档即可;
  • 在自定义的AsyncTask的回调函数中,可以更新UI的函数内都出现了对textView的更新操作;还有其它方法更新UI,只要可以达到操作要求,又能让代码易于理解,哪种方式倒是无所谓;

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="RefreshUI" />
    </LinearLayout>

</ScrollView>

 一次点击运行效果:



 

 

 

 

四次点击运行结果:



 

多说一句:千万不要在protected String doInBackground(String... params)方法中操作UI哦!:)

 

 

 

 

  • 大小: 15.4 KB
  • 大小: 17 KB
  • 大小: 22.1 KB
  • 大小: 28.9 KB
  • 大小: 68.7 KB
分享到:
评论

相关推荐

    Android 使用AsyncTask异步更新UI界面

    Android 使用AsyncTask异步更新UI界面

    Android异步处理二:使用AsyncTask异步更新UI界面

    Android异步处理二:使用AsyncTask异步更新UI界面。

    android asynctask的fragment更新UI(附线程管理)

    android asynctask的fragment更新UI(附线程管理) 博客地址:http://blog.csdn.net/qq_16064871

    Android学习笔记(三二):线程:后台异步任务AsyncTask_IT168文库

    Android学习笔记(三二):线程:后台异步任务AsyncTask_IT168文库

    Android中AsyncTask实现多线程计数

    Android中AsyncTask实现多线程计数,UI主线程运行,启动另一个线程计数并在UI主线程上显示.

    Android异步任务之AsyncTask源码

    因为,UI线程主要是用来更新界面UI,如果一次进行太多的任务处理,并且这些任务需要相当的时间来完成,就会造成UI线程堵塞,结果可能是应用无响应(Android4.0以后,谷歌已经禁止在UI线程中进行“耗时操作”),这样的...

    Android中AsyncTask的使用com.scott.async

    Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易...

    异步线程AsyncTask

    首先明确Android之所以有Handler和AsyncTask 都是为了不阻塞主线程(UI线程) 且UI的更新只能在主线程中完成 因此异步处理是不可避免的 Android为了降低这个开发难度 提供了AsyncTask AsyncTask就是一个封装过的...

    详解android进行异步更新UI的四种方式

    大家都知道由于性能要求,Android要求只能在UI线程中更新UI,要想在其他线程中更新UI,我大致总结了4种方式,欢迎补充纠正: 使用Handler消息传递机制; 使用AsyncTask异步任务; 使用runOnUiThread(action)方法...

    Android AsyncTask 后监听异步加载完毕的动作详解

    比如GridView ,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread 、Timer 或者使用AsyncTask ,而这些操作都是在在后台另外开一个线程给我们找数据,具体得到的数据需要使用Handler 去更新UI,AsyncTask 也是...

    Android Aysnctask更新UI

    本篇讲解AsyncTask的使用,并且举了完整的例,Android提供了以下几个办法,Handler更新UI;广播中更新UI;Activity runOnUiThread(Runnable run);View:post();View:postDelayed();AsyncTask。

    android AsyncTask详细介绍

    AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: 简单,快捷 过程...

    Android中AsyncTask异步任务使用详细实例(一)

    可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程,通过本文给大家介绍Android中AsyncTask异步任务使用详细实例(一),...

    详解Android 中AsyncTask 的使用

    详解Android 中AsyncTask 的使用 1、首先我们来看看AsyncTask 的介绍:   Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式;其中:  Handler 实例向 UI 线程发送消息,完成界面更新,   优点:...

    Android中通过AsyncTask类来制作炫酷进度条的实例教程

    AsyncTask (API level 3,所以几乎所有目前在市面上流通的 Android 版本皆可使用) 是除 Thread 外的另一种选择,Android 团队鼓励主执行绪(UI thread) 专注于操作 & 画面的流畅呈现, 其余工作 (如网络资料传输、...

    android使用AsyncTask实现多线程下载实例

    AsyncTask不仅方便我们在子线程中对UI进行更新操作,还可以借助其本身的线程池来实现多线程任务。下面是一个使用AsyncTask来实现的多线程下载例子。 01 效果图 02 核心类 – DownloadTask.class public class ...

    Android中AsyncTask的入门使用学习指南

    AsyncTask异步任务,用于执行耗时任务并在UI线程中更新结果。下面这篇文章主要给大家介绍了关于Android中AsyncTask入门使用的相关资料,需要的朋友可以参考下

    Android 使用AsyncTask 后监听异步加载完毕的动作

    AsyncTask的使用方法网上有很多例子,使用起来也非常的方便。...场景模拟当我们在加载一个列表的时候,比如GridView,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread、Timer或者使用AsyncTask。

Global site tag (gtag.js) - Google Analytics