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,,,,");
        }
        
        
        
        
    }

  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/wblyuyang/p/3996068.html
Copyright © 2011-2022 走看看