package cn.edu.jlnu.asymessage;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private Button btn;
private ProgressBar pb;
private int progress=0;
private Handler handler=new Handler(){
/**
* Subclasses must implement this to receive messages.
*
* @param msg
*/
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
btn.setText("呵呵");
break;
case 2:
String str= (String) msg.obj;
btn.setText(str);
break;
case 3:
if(progress<=100){
progress+=10;
pb.setProgress(progress);
handler.sendEmptyMessageDelayed(3,2000);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb= (ProgressBar) findViewById(R.id.progress);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {//
@Override
public void run() {
// try {
// /*
// 報錯
// 不能在子線程操作UI控件
// */
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// handler.sendEmptyMessage(1);
/*
此代碼和以上實現的功能是一樣的!
*/
// btn.setText("呵呵");
// handler.sendEmptyMessageDelayed(1,2000);
/*
以下發送一個消息實體
*/
// String str="我愛你,中國!";
// Message message=new Message();
// message.obj=str;
// message.what=2;
// handler.sendMessage(message);
// handler.sendMessageDelayed(message, 3000);
}
}).start();
//testTimer();
testPost();
}
});
}
public void testTimer(){
pb.setVisibility(View.VISIBLE);
handler.sendEmptyMessageDelayed(3, 2000);
}
public void testPost(){//post方法允許你排列一個runnable對象到主線程隊列中,等待執行!
// handler.post(new Runnable() {
// @Override
// public void run() {
// Log.d("TAG","handler post");
// }
// });
// handler.postDelayed(new Runnable() {
// @Override
// public void run() {
// Log.d("TAG","handler post delay");
// }
// },2000);
//所以它可以直接操控UI
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//在非主線程(UI線程)更新UI控件
// handler.post(new Runnable() {
// @Override
// public void run() {
// btn.setText("我愛你,祖國!");
// }
// });
// handler.postDelayed(new Runnable() {
// @Override
// public void run() {
// btn.setText("我愛你,祖國!");
// }
// },3000);
//以下方法依然可以
// btn.post(new Runnable() {
// @Override
// public void run() {
// btn.setText("我愛你,吉林!");
// }
// });
runOnUiThread(new Runnable() {
@Override
public void run() {
btn.setText("我愛你,四平!");
}
});
}
}).start();
}
}
handler用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.