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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM