zoukankan      html  css  js  c++  java
  • Android ------ handler 异步处理消息

    Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。 Handler 常用方法:

    post(Runnable)

    postAtTime(Runnable,long)

    postDelayed(Runnable long)

    sendEmptyMessage(int)

    sendMessage(Message)

    sendMessageAtTime(Message,long)

    sendMessageDelayed(Message,long)

    以上post类方法允许你排列一个Runnable对象到主线程队列中, sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

    例子运行逻辑:

    点击button --- > 启动一条新线程,用来处理数据 ---- >数据处理完毕,通过handler返回 ----- > handler里面接收返回的数据,进行UI更新等处理。

    package com.example.handlertest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        private TextView text;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            text = (TextView)findViewById(R.id.textView);
       }
    
    
    
        //定义一个handler,用来异步处理数据
        Handler handler = new Handler(){
            public void handleMessage(android.os.Message msg) {
                System.out.println("结果返回,正在处理....");
                
                if (msg.what == 1) {
                    text.setText("异步处理结果是 === handler");
                }
                
            };
        };
        
        
        //新开一条线程,用来异步处理数据,结果通过handler返回
        Thread thread = new Thread(){
            public void run() {
                System.out.println("start thread,,,,");
                
                handler.sendEmptyMessage(1);
            };
        };
        
        
        //点击按钮
        public void StartTest(View v){
            thread.start();
            
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println("onClick,,,,");
        }
        
        
        
        
    }

  • 相关阅读:
    jquery通过val()取不到textarea中的值
    form表单右边弹窗提示不能为空
    正则表达式
    layui表格的批量删除功能
    layui中table表格的操作列(删除,编辑)等按钮的操作
    layui动态渲染生成select的option值
    layui实现table表格的“关键字搜索”功能
    Python3基础 break while循环示例
    Python3基础 bool类型变量赋值
    Python3基础 assert 断言 确保程序的正确运行条件
  • 原文地址:https://www.cnblogs.com/wblyuyang/p/3996068.html
Copyright © 2011-2022 走看看