android中的線程的簡單運用

新建了兩個線程一個用來顯示進度條,一個用來顯示計數。


package com.fover;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class NotebookActivity extends Activity {
	private int iCount;
	private ProgressBar progress;
	private TextView textView;
	private int count;
	// 設置case標識符
	protected static final int STOP = 1;
	protected static final int NEXT = 2;
	protected static final int GOD = 3;
	protected static final int BLESS = 4;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 獲得控件
		Button button = (Button) findViewById(R.id.game_button);
		progress = (ProgressBar) findViewById(R.id.progressBar1);
		Button button2 = (Button) findViewById(R.id.game_button2);
		textView = (TextView) findViewById(R.id.textviewforcount);
		button2.setOnClickListener(new timer());
		// 設置progressbar的最大值
		progress.setMax(100);
		// 設置progressbar的初始值
		progress.setProgress(0);
		// 設置progressbar的可視情況
		// progress.setVisibility(View.INVISIBLE); //不可見,但是progressbar依舊會佔着位置
		// GONE參數隱藏ProgressBar並且不佔位置
		progress.setVisibility(View.GONE);
		// 設置按鈕的監聽
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// 新建一個線程
				Thread xx = new Thread(new Runnable() {

					@Override
					public void run() {
						for (int i = 0; i < 20; i++) {
							try {
								// 設置計數器
								iCount = (i + 1) * 5;
								// 設置線程的休眠時間
								Thread.sleep(1000);
								// 當值爲19時,也就是progressbar的
								// 進度條是100%的時候發送STOP信息給mHandler
								if (i == 19) {
									Message msg = new Message();
									msg.what = STOP;
									mHandler.sendMessage(msg);
									// 當值不爲19時,也就是進度條還沒有達到百分百時候,發送NEXT信息給mHandler
								} else {
									Message msg = new Message();
									msg.what = NEXT;
									mHandler.sendMessage(msg);
								}

							} catch (Exception e) {
								e.printStackTrace();
							}

						}
					}
				});
				// 注意不要忘記這段代碼
				xx.start();
			}
		});

	}

//此段方法同上,不做過多解釋了
	class timer implements OnClickListener {
		
		@Override
		public void onClick(View v) {
			Thread cc = new Thread(new Runnable() {
				
				@Override
				public void run() {
					for (int i = 0; i < 50; i++) {
						try {
							count = i;
							Thread.sleep(1000);
							if (i == 49) {
								Message sng = new Message();
								sng.what = GOD;
								mHandler.sendMessage(sng);
							} else {
								Message sng = new Message();
								sng.what = BLESS;
								mHandler.sendMessage(sng);
								
							}
							
						} catch (Exception e) {
							e.printStackTrace();
						}
						
					}
				}
			});
			cc.start();
		}
	}
	
	// 新建一個Handler
	private Handler mHandler = new Handler() {
		// 接收message信息
		@Override
		public void handleMessage(Message msg) {

			switch (msg.what) {
			// 接收到STOP信息將處理:將進度條設置爲不可視,同時在屏幕上輸出提示信息
			case STOP:
				progress.setVisibility(View.GONE);
				Toast.makeText(NotebookActivity.this, "進度條執行完畢",
						Toast.LENGTH_SHORT).show();
				break;
			// 接收到NEXT信息將處理:將進度條設置爲可見,同時設置進度條的進度
			case NEXT:
				if (!Thread.currentThread().isInterrupted()) {
					progress.setVisibility(View.VISIBLE);
					progress.setProgress(iCount);
				}
				break;
			case GOD:
				textView.setText("已經結束了,親");
				break;
			case BLESS:
				if (!Thread.currentThread().isInterrupted()) {
					textView.setText("已經失去了" + count + "秒");
				}
				break;
			default:
				break;
			}

		}

	};




}

如有問題歡迎指正。

PS:參考CSDN上的先人源代碼拼湊而成。

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章