关于Handler中的sendEmptyMessage和sendEmptyMessageDelayed的运行流程
关于如下代码,在第28行的onFinishInflate()方法内,当系统加载完界面后执行本方法,“timerHandler.sendEmptyMessage(0);”是向timeHandler发送一个Value为“0”的空消息。“timerHandler.sendEmptyMessageDelayed(0, 1000);”Value为“0”的空消息延迟1秒。“refreshTime();”方法刷新当前TextView显示的时间。这三个语句如何调用的,我不理解系统走的流程。求各位帮忙解释下。最好带我走一边流程。
package com.liuyuan.clock;
import java.util.Calendar;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class TimeView extends LinearLayout {
private TextView tvTime;
public TimeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public TimeView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TimeView(Context context) {
super(context);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
tvTime = (TextView) findViewById(R.id.tvTime);
timerHandler.sendEmptyMessage(0);
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility == View.VISIBLE) {
timerHandler.sendEmptyMessage(0);
} else {
timerHandler.removeMessages(0);
}
}
private void refreshTime() {
Calendar c = Calendar.getInstance();
tvTime.setText(String.format(“%d:%d:%d”, c.get(Calendar.HOUR_OF_DAY),
c.get(Calendar.MINUTE), c.get(Calendar.SECOND)));
}
private Handler timerHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
refreshTime();
if (getVisibility() == View.VISIBLE) {
timerHandler.sendEmptyMessageDelayed(0, 1000);
}
};
};
}
——解决思路———————-
这个0的意思是what的值,你可以传随便数字,在handleMessage方法中,你可以用switch来区分不同的传值来做不同的事。
textview更新,你就timerHandler.sendEmptyMessage(1)再在case 1:中实现更新操作。