使用runOnUiThread更新UI
来源:互联网 发布:centos搭建l2tp服务器 编辑:程序博客网 时间:2024/05/16 13:05
转载自:http://blog.csdn.net/u010142437/article/details/17953495
下面介绍一种使用Activity的runOnUiThread方法来实现同样的功能,仍以此示例为例:
MainActivity:
- package com.home.testrunonuithread;
- import android.app.Activity;
- import android.app.Dialog;
- import android.app.ProgressDialog;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity {
- // 该程序模拟填充长度为100的数组
- private int[] data = new int[100];
- private int hasData = 0;
- // 定义进度对话框的标识
- private final int PROGRESS_DIALOG = 0x112;
- // 记录进度对话框完成的百分比
- private int progressStatus = 0;
- // 定义一个进度对话框对象
- private ProgressDialog pd;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button btn = (Button) findViewById(R.id.btn1);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- progressStatus = 0;
- hasData = 0;
- // 显示指定对话框
- showDialog(PROGRESS_DIALOG);
- }
- });
- }
- // 创建对话框
- @Override
- protected Dialog onCreateDialog(int id, Bundle args) {
- switch (id) {
- case PROGRESS_DIALOG:
- // 创建进度对话框
- pd = new ProgressDialog(this);
- pd.setMax(100);
- // 设置对话框标题
- pd.setTitle("任务完成百分比");
- // 设置对话框显示的内容
- pd.setMessage("下载完成的百分比");
- // 设置对话框不能用取"消按"钮关闭
- pd.setCancelable(false);
- // 设置对话框的进度条风格
- // pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- // 设置对话框的进度条是否显示进度
- pd.setIndeterminate(false);
- break;
- }
- return pd;
- }
- // 该方法将在onCreateDialog调用后被回调
- @Override
- protected void onPrepareDialog(int id, Dialog dialog) {
- super.onPrepareDialog(id, dialog);
- switch (id) {
- case PROGRESS_DIALOG:
- // 对话框进度清零
- pd.incrementProgressBy(-pd.getProgress());
- new Thread() {
- public void run() {
- while (progressStatus < 100) {
- // 获取耗时任务完成的百分比
- progressStatus = doWork();
- // 运行于UI线程
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- // 设置进度条的进度
- pd.setProgress(progressStatus);
- }
- });
- }
- // 如果任务已经完成
- if (progressStatus >= 100) {
- // 关闭对话框
- pd.dismiss();
- }
- }
- }.start();
- break;
- }
- }
- /**
- * 模拟一个耗时的操作
- *
- * @return
- */
- public int doWork() {
- // 为数组元素赋值
- data[hasData++] = (int) (Math.random() * 100);
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return hasData;
- }
- }
布局文件只有一个按钮不再给出。
从runOnUiThread的源码可以看出:
- public final void runOnUiThread(Runnable action) {
- if (Thread.currentThread() != mUiThread) {
- mHandler.post(action);
- } else {
- action.run();
- }
- }
程序首先会判断当前线程是否是UI线程,如果是就直接运行,如果不是则post,这时其实质还是使用的Handler机制来处理线程与UI通讯。
但这个方法,在处理一些简要的更新UI操作时(比如更新adapter等),显得更简洁、方便。
0 0
- 使用runOnUiThread更新UI
- 使用runOnUiThread更新UI
- activity 使用runOnUiThread更新 ui
- activity 使用runOnUiThread更新 ui
- 使用runOnUiThread更新主线程UI
- 使用Thread+Handler或runOnUiThread更新UI
- runOnUiThread 用于更新UI
- 更新UI-runOnUIThread
- runOnUiThread 更新ui
- 使用Activity类的runOnUiThread执行线程更新UI操作
- 使用Activity类的runOnUiThread执行线程更新UI操作
- runOnUIThread、Handler、AsyncTask与子线程结合使用更新UI
- Activity类的runOnUiThread更新UI
- 更新UI操作,Handler与runOnUiThread
- UI更新方法Handler和runOnUiThread
- Android 更新UI——runOnUiThread()
- runOnUiThread和Handler机制更新UI
- Android异步更新UI的方式之使用runOnUiThread(action)方法
- Linux进程内存分布
- 继承classLoader加载一个class文件demo
- 多线程:NSThread
- linux常用命令—— 网络通信(九)
- 程序的加载
- 使用runOnUiThread更新UI
- x265-1.7版本-common/cudata.cpp注释
- 第一行代码
- android input子系统之三:事件层
- Linux下errno错误信息对照
- Linux workqueue工作原理
- 试客小兵是真的吗?试客小兵下载,试客小兵什么时候刷新任务?
- 标准库 bitset
- 解决触控点击事件和手势的冲突