Android子線程更新UI兩種方法

pxdb 11年前發布 | 3K 次閱讀 Java Android

大家都知道直接在子線程里更新UI是不被允許的,所以下面提供兩種方法解決問題:

直接上代碼:

    package com.wr.updateui;

import android.annotation.SuppressLint;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  

public class MainActivity extends Activity {  

    private static final int UPDATE_TEXT = 1;  
    private TextView tv;  
    private Button btn;  
    @SuppressLint("HandlerLeak")  
    private Handler handler = new Handler() {  
        public void handleMessage(Message msg) {  
            switch (msg.what) {  
            case UPDATE_TEXT:  
                tv.setText("nihao");  
            default:  
                break;  
            }  
        }  
    };  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        tv = (TextView) findViewById(R.id.textView);  
        btn = (Button) findViewById(R.id.button);  
        btn.setOnClickListener(new OnClickListener() {  

            @Override  
            public void onClick(View arg0) {  
                // TODO Auto-generated method stub  

                /**  
                 * 第一種使用Android的異步處理機制。 
                 */  

                /* 
                new Thread(new Runnable() { 

                    @Override 
                    public void run() { 
                        // TODO Auto-generated method stub 
                        Message message = new Message(); 
                        message.what = UPDATE_TEXT; 
                        handler.sendMessage(message); 
                    } 
                }).start(); 
                */  

                /**  
                 * 第二種,直接使用runOnUiThread. 
                 */  
                runOnUiThread(new Runnable() {  

                    @Override  
                    public void run() {  
                        // TODO Auto-generated method stub  
                        tv.setText("nihao");  
                    }  
                });  

            }  
        });  
    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.main, menu);  
        return true;  
    }  

    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        // Handle action bar item clicks here. The action bar will  
        // automatically handle clicks on the Home/Up button, so long  
        // as you specify a parent activity in AndroidManifest.xml.  
        int id = item.getItemId();  
        if (id == R.id.action_settings) {  
            return true;  
        }  
        return super.onOptionsItemSelected(item);  
    }  
}  </pre> 


 本文由用戶 pxdb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!