Android学习笔记之:android更新ui的几种经常用法
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的几种经常用法的更多相关文章
- [Android学习笔记]子线程更新UI线程方法之Handler
关于此笔记 不讨论: 1.不讨论Handler实现细节 2.不讨论android线程派发细节 讨论: 子线程如何简单的使用Handler更新UI 问题: android开发时,如何在子线程更新UI? ...
- Android 在子线程中更新UI的几种方法
第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里 ...
- Android学习笔记--处理UI事件
Handling UI Events 在Android里, 有不只一种方式可以截获用户与你的应用程序交互的事件. 在你的界面上处理事件时,你需要捕获用户与某个View实例交互时所产生的事件.View类 ...
- Android学习笔记(三) UI布局
每一个布局都有其适合的方式,另外,这几个布局元素可以相互嵌套应用,做出美观的界面. 一.线性布局(LinearLayout) 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下 ...
- Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...
- android学习笔记45——android的数据存储和IO
android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...
- Android学习笔记之Android Studio下创建menu布局文件
1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...
随机推荐
- PHP富文本编辑器 之Kindeditor的使用 一
一.下载编辑器源码 KindEditor 4.1.10 (2013-11-23) [1143KB] 下载页面: http://kindeditor.net/down.php 二.部署编辑器 将下载文件 ...
- C与C艹的内存管理方式
C 内存开辟出的空间一般可以分成:代码段,数据段(初始化的数据段, 为初始化的数据段BSS),堆,栈 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写 数据段:保存初始化的全局变量 ...
- 【转】Linux账号管理之useradd
转自:http://www.jb51.net/article/45848.htm Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然 ...
- Hadoop Hive概念学习系列之hive里的桶(十一)
不多说,直接上干货! Hive还可以把表或分区,组织成桶.将表或分区组织成桶有以下几个目的: 第一个目的是为看取样更高效,因为在处理大规模的数据集时,在开发.测试阶段将所有的数据全部处理一遍可能不太 ...
- 实现一个类似于收趣APP的功能
近日想做一个类似于收趣APP软件的一个功能,将头条.微信等其他App的文章能够通过分享微信好友的方式分享到自己的平台软件中. 分享的方式有三种: 1.通过微信好友的方式,将文章分享给收趣. 2.复制文 ...
- ubuntu14.04禁用USB外存储设备
ubuntu 14.04中禁用usb外存储设备: 在网上找了很多方法,大概都是下面的命令,而实际测试的时候没有什么作用. gsettings set org.gnome.desktop.media-h ...
- BZOJ 2276: [Poi2011]Temperature 单调队列
Code: #include<bits/stdc++.h> #define maxn 3000000 using namespace std; void setIO(string s) { ...
- bootstrap中chosen控件样式有时会冲突
加上这句话试试 $(".chosen-container").css("width","100%"); 或者 100%改成 100px试试
- Oracle中的rownum 和rowid的用法和区别
Oracle中的rownum 和rowid的用法和区别 1.rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum).对符合条件的结果添加一个从1开始的序列号. eg ...
- Django - 获取表单数据的三种方式
1.query set 对象 2.字典 3.query set 元组 备注:对象通过 ”对象.列名"方式访问,元组通过“对象.索引”方式访问.