1. 程式人生 > >使用Thread來實現耗時操作和重新整理UI

使用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();
			}
		});
	}
}
佈局檔案:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ygc.handlerupdateui.MainActivity" >
<Button 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    android:layout_centerInParent="true"
    android:text="開始更新"/>

<ProgressBar
    android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button"
    android:layout_centerHorizontal="true"
    android:visibility="gone"
    android:layout_marginBottom="69dp" />

</RelativeLayout>
佈局雖然很簡單,但是還是粘上了,省的大家自己操作的時候麻煩>-<