等等,我想起來了。今天是學習了Hander
那什麼是Hander
你不會百度啊...算了 Handler:是一個消息分發對象,進行發送和處理消息,並且其 Runnable 對象與一個線程的 MessageQueue 關聯。
作用:調度消息,將一個任務切換到某個指定的線程中去執行。
那什麼是Looper和MessageQueue?
我記得是路xx和潘xx來着,一個人傳遞,一個是開關什麼的(來自老師的一次同學舉例)
想死嗎?
有消息循環的線程一般都會有一個Looper,只要有Looper,就可以往消息隊列裏面添加東西,並做相應的處理。
一個MessageQueue需要一個Looper。
我還沒說完呢,MessageQueue是消息隊列,用來存放Handler發送過來的消息。我還是繼續說完怎麼用Hander吧————————前方大量文字————-
- 創建一個工作線程,繼承 Thread,重新 run 方法,處理耗時操作
- 創建一個 Message 對象,設置 what 標誌及數據
- 通過 sendMessage 進行投遞消息
創建一個handler,重寫 handleMessage 方法,根據 msg.what 信息判斷,接收對應的信息,再在這裏更新 UI。
private Handler handler = new Handler(){
@Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { //判斷標誌位 case 1: /** 獲取數據,更新UI */ break; } }
};
public class WorkThread extends Thread {
@Override
public void run() {
super.run();
/**
耗時操作
*/
我一看你就是抄襲的,那我考考你,用Hander做倒計時10秒的案例,我要代碼和效果圖!!!
哦,那我就給你表演一下如何畫出一個自然的手部_____哦,不,是我案例舉例
這是一個界面的效果,這裏少截取了vertical。
package com.example.lenovo.handlerdemo;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class DaojishiActivity extends AppCompatActivity {
private Button daojishiBtn;
private EditText daojishiET;
private int time;
private TextView daojishiTV;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
daojishiTV.setText(msg.what+"");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daojishi);
bindID();
daojishiBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
time = Integer.parseInt(daojishiET.getText().toString());
new Thread(new Runnable() {
@Override
public void run() {
Message message = handler.obtainMessage();
for (int i=time;i>0;i--){
//Message message = handler.obtainMessage();
// message.what = time;
// handler.sendMessage(message);
handler.sendEmptyMessage(i);
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}).start();
}
});
}
private void bindID() {
daojishiBtn = findViewById(R.id.daojishi_btn);
daojishiET = findViewById(R.id.daojishi_et);
daojishiTV = findViewById(R.id.daojishi_tv);
}
}
拿去全拿去,都是自己手打出來的。
??你以爲憑這種東西就可以成爲“高壓突擊小隊”的一員嗎?不存在的。
。。。
(第一次用漫畫的形式,希望知識點不再枯燥)