Android主线程不能运行耗时操作。我们通常是在子线程中运行耗时操作,
我们在运行完耗时操作后,我们一般能够通过下面几种方式来实现ui界面的更新。 首先是布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/mTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="16sp" />
<Button
android:id="@+id/update_mButton_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Hander Post"
android:textSize="15sp" />
<Button
android:id="@+id/update_mButton_02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Hander SendMessage"
android:textSize="15sp" />
<Button
android:id="@+id/update_mButton_03"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="RunOnUiThread"
android:textSize="15sp" />
<Button
android:id="@+id/update_mButton_04"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="View Post"
android:textSize="15sp" />
</LinearLayout>

————–代码实现,有凝视————————————-

public class MainActivity extends Activity implements OnClickListener {
private TextView mTextView;
private Button update_mButton_01;
private Button update_mButton_02;
private Button update_mButton_03;
private Button update_mButton_04;
private Handler mPostHander = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 1) {
// 更新UI
mTextView.setText("通过Hander Send Message更新Ui");
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initEvents();
} /**
* 初始化控件
* @description:
* @date 2015-10-8 上午10:55:49
*/
private void initViews() {
this.mTextView = (TextView) findViewById(R.id.mTextView);
this.update_mButton_01 = (Button) findViewById(R.id.update_mButton_01);
this.update_mButton_02 = (Button) findViewById(R.id.update_mButton_02);
this.update_mButton_03 = (Button) findViewById(R.id.update_mButton_03);
this.update_mButton_04 = (Button) findViewById(R.id.update_mButton_04);
} /**
* 事件监听
* @description:
* @date 2015-10-8 上午10:56:02
*/
private void initEvents() {
this.update_mButton_01.setOnClickListener(this);
this.update_mButton_02.setOnClickListener(this);
this.update_mButton_03.setOnClickListener(this);
this.update_mButton_04.setOnClickListener(this);
} @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.update_mButton_01:// 第一种方式,通过Hander.post方法来实现UI更新
new Thread() {
public void run() {
try {
sleep(2000);// 休眠2秒,模拟耗时操作
mPostHander.post(new Runnable() { @Override
public void run() {
// 更新UI
mTextView.setText("通过Hander Post更新Ui");
}
});
}
catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
break;
case R.id.update_mButton_02:// 直接通过Hander发送Message来更新UI
new Thread() {
public void run() {
try {
sleep(2000);// 休眠2秒。模拟耗时操作
mPostHander.sendEmptyMessage(1);
}
catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); break;
case R.id.update_mButton_03:// 通过runOnUiThread来实现ui更新
new Thread() {
public void run() {
try {
sleep(2000);// 休眠2秒。模拟耗时操作
runOnUiThread(new Runnable() { @Override
public void run() {
// 更新UI
mTextView.setText("通过runOnUiThread更新Ui");
}
});
}
catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); break;
case R.id.update_mButton_04:// 直接利用View.post方法来更新ui
mTextView.post(new Runnable() {
@Override
public void run() {
// 更新UI
mTextView.setText("通过View.post()更新Ui");
}
});
break;
}
}
}

Android学习笔记之:android更新ui的几种经常用法的更多相关文章

  1. [Android学习笔记]子线程更新UI线程方法之Handler

    关于此笔记 不讨论: 1.不讨论Handler实现细节 2.不讨论android线程派发细节 讨论: 子线程如何简单的使用Handler更新UI 问题: android开发时,如何在子线程更新UI? ...

  2. Android 在子线程中更新UI的几种方法

    第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里 ...

  3. Android学习笔记--处理UI事件

    Handling UI Events 在Android里, 有不只一种方式可以截获用户与你的应用程序交互的事件. 在你的界面上处理事件时,你需要捕获用户与某个View实例交互时所产生的事件.View类 ...

  4. Android学习笔记(三) UI布局

    每一个布局都有其适合的方式,另外,这几个布局元素可以相互嵌套应用,做出美观的界面. 一.线性布局(LinearLayout) 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下 ...

  5. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  6. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  7. Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns

    摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...

  8. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  9. Android学习笔记之Android Studio下创建menu布局文件

    1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...

随机推荐

  1. 【BZOJ4241】历史研究(回滚莫队)

    题目: BZOJ4241 分析: 本校某些julao乱膜的时候发明了个"回滚邹队",大概意思就是某个姓邹的太菜了进不了省队回滚去文化课 回滚莫队裸题qwq(话说这个名字是不是莫队本 ...

  2. ACM_黯然销魂?

    黯然销魂? Time Limit: 2000/1000ms (Java/Others) Problem Description: 发神集训表现出色,决定要送他鸡翅,但是锴神决定不让他那么容易拿到,所以 ...

  3. Web页面使用VLC播放插件

    一.原生态Demo下载 选择原因:我们为什么选择VLC播放插件?原因是它支持IE8浏览器播放视频,如果高版本的浏览器大可不必选择该插件,很多html5插件既好用又简单,但是有些交管或政府 部门还是限制 ...

  4. SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。

    (1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...

  5. 【PostgreSQL-9.6.3】分区表

    PostgreSQL中的分区表是通过表继承来实现的(表继承博客http://www.cnblogs.com/NextAction/p/7366607.html).创建分区表的步骤如下: (1)创建“父 ...

  6. html5——DOM扩展

    元素获取 1.document.getElementsByClassName ('class') 通过类名获取元素,以类数组形式存在. 2.document.querySelector(‘div’) ...

  7. 史上巨坑: vim的"set foldmethod=syntax"设置竟然是导致ctrl+p(ctrl+n)补全在文件稍大时光标位于中间位置补全效率变慢的元凶!

    最近我的vim又让我闹心了. 问题出现在supertab的补全速度上, 有时候按下tab键半天才弹出补全列表, 即便是弹出了列表在列表上下移动也变得的相当缓慢, 这让我的很是蛋疼. 在完全无法接受这个 ...

  8. 您厉害您赚得多:聪明投资者的聊天记录,雪球CEO的21条投资理念

    3星|<您厉害您赚得多>:雪球创始人的投资理念.原则.技巧,及其在雪球上跟一些用户的互动的内容 作者是雪球创始人.CEO,全书基本是作者的一些投资理念+作者在雪球上跟用户的互动的内容,还有 ...

  9. Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)

    Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...

  10. 【LaTeX】对xelatex的中英文设置不同的字体

    不建议用Ctex套装,不好用. 用MixTex+TexStudio! XeTeX处理中文非常方便,不需要任何设置,就能够使用系统中安装的TrueType和OpenType字体. MikTeX2.7中已 ...