开发安卓半年了,其实还是一只菜鸟,对安卓中的线程、Looper、Handler、Task还是比较陌生的。现在抽了一点儿小空,自己写了一个关于Handler+Thread联用的例子。
直接上代码了:
package com.hyc.myapplication.handler;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
/**
* Created by asus on 12/29/2015.
*/
public class MyHandler extends Handler {
public static final int MSG_WHAT = 0X1;
private TextView textView;
public MyHandler(TextView textView) {
this.textView = textView;
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_WHAT:
textView.setText(msg.obj.toString());
break;
}
super.handleMessage(msg);
}
}
package com.hyc.myapplication.thread;
import android.os.Message;
import com.hyc.myapplication.handler.MyHandler;
/**
* Created by asus on 12/29/2015.
*/
public class MyThread implements Runnable {
private MyHandler handler;
private boolean flag = true;
public MyThread(MyHandler handler) {
this.handler = handler;
}
@Override
public void run() {
while (flag) {
Message msg = new Message();
msg.what = MyHandler.MSG_WHAT;
msg.obj = System.currentTimeMillis();
handler.sendMessageDelayed(msg, 1000);
}
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
以下为启动线程:
@Override
public void onClick(View view) {
mHandler = new MyHandler(tvNum);
mThread = new MyThread(mHandler);
Thread t = new Thread(mThread);
t.start();
}
以下为停止线程:
tvHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mThread.setFlag(false);
}
});
结果出来后,发现一个问题:界面跳动的数字时快时慢,不知原因。