handler和runOnMainThread更新界面问题

我们都知道的事情是Android界面的更新只能在主线程总进行。但是,我非要通过子线程更新界面怎么样做呢。

朋友遇到的问题,他是学java后台的,突然对Android感兴趣,于是问我关于线程更新界面的问题:

我现在使用线程更新界面的方法有两个一是handler另外一个就是runOnMainThread,不过handler对与非常快的更新是不好的,容易造成线程滞后,也就是说这种方式只能适用在不是非常频繁的更新中使用的。

handler更新界面又可以根据两种方式来更新:Message和Runable,使用Message可以从子线程中传递一些参数给主线程,Handler获取这些信息并进行相应的处理。使用Runnable则可以直接执行某个处理结果。其实,这两者的实质都是在Handler的队列中放入内容,Handler会处理完一个消息或者执行完某个处理之后再进行下一步操作,这样就不会出现多个线程同时要求进行UI处理而引发混乱现象。

具体代码如下:

package com.example.androidui;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {

	private TextView mText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		new Thread(mRunnable).start();
		mText = (TextView) findViewById(R.id.text);
	}

	private Runnable mRunnable = new Runnable() {
		public void run() {
			while (true) {
				try {
					Thread.sleep(1000);
					mHandler.sendMessage(mHandler.obtainMessage());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	};

	private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			update();
		}

		private void update() {
			mText.setText("更新界面——handler");
		}
	};

}
而runOnMainThread更新界面非常简单,代码如下:

package com.example.androidui;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private TextView mText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mText = (TextView) findViewById(R.id.text);
		
		MainActivity.this.runOnUiThread(new Runnable()    
	    {    
	        public void run()    
	        {    
	            mText.setText("更新界面-runOnUiThread") ; 
	        }    

	    });
	}
}



你可能感兴趣的:(handler和runOnMainThread更新界面问题)