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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章