runOnUiThread学习

runOnUiThread参考:

http://blog.163.com/menxu_work/blog/static/20777441920125311250187/

Activity类的runOnUiThread方法你用过吗,如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似

Activity.this. runOnUiThread(new Runnable() {

@Override

public void run() {

       // refresh ui 的操作代码

   }

});

这里需要注意的是runOnUiThread是Activity中的方法,在线程中我们需要告诉系统是哪个activity调用,所以前面显示的指明了activity。

 

http://blog.163.com/ppy2790@126/blog/static/10324224120138210440928/

更新UI采用Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。
 
利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 
 
Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。
 
public class TestActivity extends Activity {

	Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.handler_msg);
		btn = (Button) findViewById(R.id.button1);

		btn.setOnClickListener(new OnClickListener() {

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

				new Thread(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
					        // 模拟耗时的操作。
						try {
							Thread.sleep(10000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						// 更新主线程UI
						TestActivity.this.runOnUiThread(new Runnable() {
							@Override
							public void run() {
								// TODO Auto-generated method stub
								btn.setText("更新完毕!");
							}
						});

					}
				}).start();

			}
		});

	}

 

 

posted @ 2014-11-09 21:44  chuiyuan  阅读(1944)  评论(0编辑  收藏  举报