Android异步更新UI的四种方式
Android异步更新UI的四种方式
大家都知道由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,我大致总结了4种方式,欢迎补充纠正
AD:
大家都知道由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,我大致总结了4种方式,欢迎补充纠正:
使用Handler消息传递机制;
使用AsyncTask异步任务;
使用runOnUiThread(action)方法;
使用Handler的post(Runnabel r)方法;
下面分别使用四种方式来更新一个TextView。
1.使用Handler消息传递机制
- package com.example.runonuithreadtest;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private TextView tv;
- Handler handler = new Handler()
- {
- public void handleMessage(android.os.Message msg) {
- if(msg.what==0x123)
- {
- tv.setText("更新后的TextView");
- }
- };
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tv = (TextView) findViewById(R.id.tv);
- new MyThread().start();
- }
- class MyThread extends Thread
- {
- @Override
- public void run() {
- //延迟两秒更新
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- handler.sendEmptyMessage(0x123);
- }
- }
- }
2. 使用AsyncTask异步任务
注:更新UI的操作只能在onPostExecute(String result)方法中。
- package com.example.runonuithreadtest;
- import android.app.Activity;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private TextView tv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tv = (TextView) findViewById(R.id.tv);
- new Yibu().execute();
- }
- class Yibu extends AsyncTask<String, String, String>
- {
- @Override
- protected String doInBackground(String... params) {
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(String result) {
- // TODO Auto-generated method stub
- tv.setText("更新后的TextView");
- }
- }
- }
3. 使用runOnUiThread(action)方法
- package com.example.runonuithreadtest;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private TextView tv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tv = (TextView) findViewById(R.id.tv);
- new MyThread().start();
- }
- class MyThread extends Thread
- {
- @Override
- public void run() {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- try {
- //延迟两秒更新
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- tv.setText("更新后的TextView");
- }
- });
- }
- }
- }
4. 使用Handler的post(Runnabel r)方
- package com.example.runonuithreadtest;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private TextView tv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tv = (TextView) findViewById(R.id.tv);
- Handler handler = new Handler();
- handler.post(new Runnable(){
- @Override
- public void run() {
- try {
- //延迟两秒更新
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- tv.setText("更新后的TextView");
- }
- });
- }
- }
Android异步更新UI的四种方式的更多相关文章
- Android 中更新 UI 的四种方式
runOnUiThread handler 的 post handler 的 sendMessage View 自身的 post
- UI的线程问题:单线程原因及更新UI的四种方式
1.UI线程为什么设计为单线程? UI控件的操作不是线程安全的,对于多线程并发访问的时候,如果使用加锁机制会导致: UI控件的操作变得很复杂. 加锁的操作必定会导致效率下降. 所以android系统在 ...
- Android开发更新UI的几种方式
1.runOnUiThread 2.handler post 3.handler sendmessage 4.view post xml布局文件: <RelativeLayout xmlns:a ...
- 更新UI的几种方式
在学习Handler的过程中牵涉到UI的更新,在这里就总结一下更新UI的四种方式吧,用法都比较简单,直接看代码就可以了. 一.使用Handler的post方法 新建项目,修改MainActivity代 ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- Android 更新UI的几种方式
1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { ...
- Android更新UI的几种方式
之前做过一个Android采集心电图数据的程序,那才是真正的多线程,之前写的小程序:比如下载个文件,从socket接受大一点的数据流然后在ui上更新进度,我都感觉这就叫做多线程了,其实这啥都不算,用个 ...
- Android通过子线程更新UI的几种方式
一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...
- Android:在子线程中更新UI的三种方式
①使用Activity中的runOnUiThread(Runnable) ②使用Handler中的post(Runnable) 在创建Handler对象时,必须先通过Context的getMainLo ...
随机推荐
- 深入理解React(二) —— 数据流和事件原理
版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/158 来源:腾云阁 https://www.qclou ...
- C#高级知识点概要(2) - 线程和并发
原文地址:http://www.cnblogs.com/Leo_wl/p/4192935.html 我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的.我希望通过自己的经验 ...
- webstorm搭建node服务器
前言,搭建服务器,必须有node.js环境(吐槽:本来就是用node搭建的(⊙o⊙)…) 下载node.js 网址 https://nodejs.org/en/ 先新建项目: 这里选择Node.js ...
- Spring 事务机制详解
原文出处: 陶邦仁 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到 ...
- uva----(10794) A Different Task
A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Bri ...
- Roman to Integer [LeetCode]
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- 给Eclipse中hibernate.cfg.xml配置文件加提示
在hibernate框架需要的jar包中找到hibernate3.jar,并用压缩软件打开,如图: 2 选择org文件夹--打开下一级文件夹 3 点击类型,方便找到dtd文件,下拉查看dtd文件,有两 ...
- js在前端获取在本地上传图片的尺寸
var MyTest = document.getElementById("upload_img").files[0];var reader = new FileReader(); ...
- Swift - 自动布局库SnapKit的使用详解2(约束的更新、移除、重做)
在之前的文章中我介绍了如何使用SnapKit的 snp_makeConstraints 方法进行各种约束的设置.但有时我们的页面并不是一直固定不变的,这就需要修改已经存在的约束.本文介绍如何更新.移除 ...
- S1 : 递归
递归函数是在一个函数通过名字调用自身的情况下构成的,如下所示 function f(num){ if(num<=1){ return 1; } else { return num*f(num-1 ...