package com.example.hander_1;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
// 声明2个按钮控件
private Button startButton = null;
private Button endButton = null;
private ProgressBar bar = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 根据控件的Id找到控件的对象,并且为两个按钮设置监听器
bar = (ProgressBar) findViewById(R.id.firstBar);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new startListener());
endButton = (Button) findViewById(R.id.endButton);
endButton.setOnClickListener(new endListener());
}
class startListener implements OnClickListener {
public void onClick(View v) {
// 马上把对象直接加载到消息队列中去,直接运行run()方法
// 2.请用handler的post方法将想要运行的线程添加到消息队列中去。
bar.setVisibility(View.VISIBLE);
handler.post(updateThread);
}
}
class endListener implements OnClickListener {
public void onClick(View v) {
// 消息队列中的对象移除掉,不在执行这个线程。
handler.removeCallbacks(updateThread);
}
}
// android系统的类,
// 1.首先创建handler对象
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
bar.setProgress(msg.arg1);
handler.post(updateThread);
}
/*
* public void handlerMessage(Message msg){ bar.setProgress(msg.arg1);
* handler.post(updateThread); }
*/
};
// 线程类,该类使用匿名内部类的方式进行声明
// 3.将要执行的线程对象写到run方法中
Runnable updateThread = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
System.out.println("Begin Thread");
i = i + 10;
// 得到一个msg消息对象
Message msg = handler.obtainMessage();
// Message 的一个整形 arg1的参数值设置为i;用arg1和arg2变量来传递消息 优点是系统性能消耗较少
msg.arg1 = i;
try {
// 设置当前线程睡眠1s
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 将msg对象加入到消息队列中去
handler.sendMessage(msg);
// System.out.println("UpdateTherad");
// 延迟3s后把对象加载到消息队列中去。
// 在run函数中运行postDelayed(),或者post();
// handler.postDelayed(updateThread, 3000);
if (i == 100) {
// 如果当前i值为100时候,讲讲吸纳成对象从handler当中移除
handler.removeCallbacks(updateThread);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
// 有两个队列 ,消息队列, 进程队列 。