使用Thread来实现耗时操作和刷新UI

实现原理:

创建一个Thread对象,然后在其run方法中调用runOnUiThread方法,在run中执行耗时操作,在runOnUiThread方法执行耗时操作完成后需要更新的UI,不要忘记调用Thread的start方法。我此处是在模拟耗时操作的时候让其显示了一个进度条,在耗时操作结束时让进度条消失,具体逻辑可以更具自己的业务需求。

代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class TestActivity extends Activity {

	Button btn;
	ProgressBar progressBar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.handler_msg);
		btn = (Button) findViewById(R.id.button);
		progressBar = (ProgressBar) findViewById(R.id.progressBar1);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				progressBar.setVisibility(View.VISIBLE);
				new Thread(new Runnable() {
//					开启一个线程处理逻辑,然后在线程中在开启一个UI线程,当子线程中的逻辑完成之后,
//					就会执行UI线程中的操作,将结果反馈到UI界面。
					@Override
					public void run() {
						// 模拟耗时的操作,在子线程中进行。
						try {
							Thread.sleep(5000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						// 更新主线程UI,跑在主线程。
						TestActivity.this.runOnUiThread(new Runnable() {
							@Override
							public void run() {
								// TODO Auto-generated method stub
								progressBar.setVisibility(View.GONE);
								btn.setText("更新完毕!");
							}
						});
					}
				}).start();
			}
		});
	}
}
布局文件:


布局虽然很简单,但是还是粘上了,省的大家自己操作的时候麻烦>-<


你可能感兴趣的:(Android基础理解)