按书上写了一个 根据模拟时钟设置数字时钟的代码
现在我想一秒钟更新一次,部分代码如下:
mHandler = new Handler()
{
public void handleMessage(Message msg )
{
switch(msg.what)
{
case MainActivity.CLOCK_FLASH:
mTextView.setText(mHour + ":" + mMin + ":" + mSec );
break;
default:
break;
}
super.handleMessage(msg);
}
};
class MyThread extends Thread
{
public void run()
{
super.run();
try
{
Message msg = new Message();
msg.what = MainActivity.CLOCK_FLASH;
while(true)
{
long time = System.currentTimeMillis();
Calendar mCalendar = Calendar.getInstance();
mHour = mCalendar.get(Calendar.HOUR);
mMin = mCalendar.get(Calendar.MINUTE);
mSec = mCalendar.get(Calendar.SECOND);
Thread.sleep(1000);
MainActivity.this.mHandler.sendMessage(msg);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
以上的代码运行会挂掉,错误信息是 This message is already in use
如果我将
Message msg = new Message();
msg.what = MainActivity.CLOCK_FLASH;
这两句代码放在while(true)内的话是没有问题,但是是否因为一直在new而导致内存被迅速“吃掉”(虽然我知道系统自己会回收的)
如果我想把以上的两句代码放在原处,那我应该加一些什么代码去确保执行正确呢?
------解决方案--------------------
如果不行,只能说message在handler发送出去的过程中某些状态被改变了,而发送前都会检查,所以不能再次发送。
------解决方案--------------------
你应该重复利用的话,点进源码看看改了什么,然后再用反射还原。。有点得不偿失的样子