android 蓝牙 sendemptymessagedelayed,关于Handler中的sendEmptyMessage跟sendEmptyMessageDelayed的运行流程…

  • Post author:
  • Post category:其他


关于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:中实现更新操作。