按书上写了一个 根据模拟时钟设置数字时钟的代码
现在我想一秒钟更新一次,部分代码如下:
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而导致内存被迅速“吃掉”(虽然我知道系统自己会回收的)如果我想把以上的两句代码放在原处,那我应该加一些什么代码去确保执行正确呢?
现在我想一秒钟更新一次,部分代码如下:
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而导致内存被迅速“吃掉”(虽然我知道系统自己会回收的)如果我想把以上的两句代码放在原处,那我应该加一些什么代码去确保执行正确呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货