zoukankan      html  css  js  c++  java
  • Handler消息机制实现更新主UI

    如下实现的是简单的更新主UI的方法,用Handler消息机制

    将textview的内容每隔一秒实现num++

    /*
     * handler消息机制
     * asynctask异步任务
     *
     * httpclient完成 android客户端向服务器传递数据:
     * get
     * post
     *
     * 主UI线程 : 负责创建UI,更新UI
     * 在android中UI操作不是线程 安全的,如果多个线程 并发的去操作同一个组件,
     * 可能导致线程 安全问题,为了解决这个问题,android制定了一个规则:
     * 只允许UI线程 来修改UI组件的属性。
     * 同时主UI线程 不也允许超过5秒以上的耗时操作,
     *
     * */

    代码:

    MainActivity.java

     1 package com.example.handler_test;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.os.Handler;
     6 import android.os.Message;
     7 import android.widget.TextView;
     8 
     9 public class MainActivity extends Activity {
    10 
    11     private TextView tv;
    12     private static int num = 1;
    13     private Handler handler;
    14     public static final int UPDATE=1;
    15 
    16     
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21         tv = (TextView) findViewById(R.id.tv);
    22         
    23         handler = new Handler(){
    24             @Override
    25             public void handleMessage(Message msg) {
    26                 super.handleMessage(msg);
    27                 switch(msg.what){
    28                 case UPDATE:
    29                     tv.setText(msg.getData().get("val")+"");
    30                     break;
    31                 }
    32             }
    33         };
    34         
    35         new Thread(){
    36             public void run() {
    37                 for(int i=0;i<16;i++){
    38                     try {
    39                         Thread.sleep(1000);
    40                     } catch (Exception e) {
    41                         e.printStackTrace();
    42                     }
    43                     Message msg = new Message();
    44                     msg.what = UPDATE;
    45                     Bundle bundle = new Bundle();
    46                     bundle.putInt("val", num++);
    47                     msg.setData(bundle);
    48                     handler.sendMessage(msg);
    49                 }
    50             };
    51         }.start();
    52         
    53     }
    54 
    55 }

    activity_main.xml

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10 
    11     <TextView
    12         android:id="@+id/tv"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:text="null" />
    16 
    17 </RelativeLayout>
  • 相关阅读:
    webpack source map
    webpack 多页面应用打包
    webpack 资源内联
    webpack 移动端 CSSpx 自动转换成 rem
    webpack postcss插件
    css实现banner背景图上文字效果+
    css实现标题下划线效果
    Day 88 Django_DRF 序列化
    Day 87 VUE——xmall_front 案例
    Day 86 VUE——Vuex
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5279049.html
Copyright © 2011-2022 走看看