Handler消息机制实现更新主UI
2016-03-15 13:04
519 查看
如下实现的是简单的更新主UI的方法,用Handler消息机制
将textview的内容每隔一秒实现num++
/*
* handler消息机制
* asynctask异步任务
*
* httpclient完成 android客户端向服务器传递数据:
* get
* post
*
* 主UI线程 : 负责创建UI,更新UI
* 在android中UI操作不是线程 安全的,如果多个线程 并发的去操作同一个组件,
* 可能导致线程 安全问题,为了解决这个问题,android制定了一个规则:
* 只允许UI线程 来修改UI组件的属性。
* 同时主UI线程 不也允许超过5秒以上的耗时操作,
*
* */
代码:
MainActivity.java
activity_main.xml
将textview的内容每隔一秒实现num++
/*
* handler消息机制
* asynctask异步任务
*
* httpclient完成 android客户端向服务器传递数据:
* get
* post
*
* 主UI线程 : 负责创建UI,更新UI
* 在android中UI操作不是线程 安全的,如果多个线程 并发的去操作同一个组件,
* 可能导致线程 安全问题,为了解决这个问题,android制定了一个规则:
* 只允许UI线程 来修改UI组件的属性。
* 同时主UI线程 不也允许超过5秒以上的耗时操作,
*
* */
代码:
MainActivity.java
package com.example.handler_test; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv; private static int num = 1; private Handler handler; public static final int UPDATE=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case UPDATE: tv.setText(msg.getData().get("val")+""); break; } } }; new Thread(){ public void run() { for(int i=0;i<16;i++){ try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } Message msg = new Message(); msg.what = UPDATE; Bundle bundle = new Bundle(); bundle.putInt("val", num++); msg.setData(bundle); handler.sendMessage(msg); } }; }.start(); } }
activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="null" /> </RelativeLayout>
相关文章推荐
- POJ2524 Ubiquitous Religions
- pip install -r requirements.txt 安装mysqldb失败 解决方案
- UIScrollView使用自动布局不能滑动的解决方法
- StringBuilder做函数参数
- UIScrollView基本使用
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- 掉UItableview headerview黏性
- SQLAlchemy 做migration的时候 ValueError: too many values to unpack
- UITableView 隐藏多余Cell的分割线
- 基于modern ui for wpf的在线公开课平台 之五 使用ListBox实现图片列表效果
- UITableView常见属性
- 【转】android UI设计的一些心得与问题解决(无效果图)
- Day3.4--Android简单UI控件之ImageView以及ScaleType的使用
- Android UI 之时间与日期控件
- Android UI控件自动提示控件(AutoCompleteTextView)
- Android UI控件Spinner控件的学习
- Android UI开发之RadioButton
- Android UI 优化——使用HierarchyViewer工具
- String, StringBuilder与StringBuffer的区别
- 192 - Word Frequency