等等,我想起来了。今天是学习了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);
}
}
拿去全拿去,都是自己手打出来的。
??你以为凭这种东西就可以成为“高压突击小队”的一员吗?不存在的。
。。。
(第一次用漫画的形式,希望知识点不再枯燥)