在android中创建一个简单的数字计时器

在android中创建一个简单的数字计时器,android,timer,Android,Timer,我基本上只想记录从应用程序启动的0:00开始的秒数和分钟数,并在文本视图中显示,这样做的最佳方法是什么?您可以使用a来安排每秒的时间 首先,你开始计时 然后在TimerTask作业中,您将获得所花费的时间(开始时间-当前时间) 将此差异格式化为xx:xx格式的字符串,并使用 您可以使用此字符串更新TextView 我不确定从TimerTask作业更新TextView时是否会出现问题,因为它没有在UI线程中运行,在这种情况下,您可以使用来执行此操作,您可以使用a来安排每秒一次 首先,你开始计

我基本上只想记录从应用程序启动的0:00开始的秒数和分钟数,并在文本视图中显示,这样做的最佳方法是什么?

您可以使用a来安排每秒的时间

  • 首先,你开始计时
  • 然后在TimerTask作业中,您将获得所花费的时间(
    开始时间-当前时间
  • 将此差异格式化为xx:xx格式的字符串,并使用
  • 您可以使用此字符串更新TextView
我不确定从TimerTask作业更新TextView时是否会出现问题,因为它没有在UI线程中运行,在这种情况下,您可以使用来执行此操作,您可以使用a来安排每秒一次

  • 首先,你开始计时
  • 然后在TimerTask作业中,您将获得所花费的时间(
    开始时间-当前时间
  • 将此差异格式化为xx:xx格式的字符串,并使用
  • 您可以使用此字符串更新TextView

我不确定从TimerTask作业更新TextView时是否会出现问题,因为它不在UI线程中运行,在这种情况下,您可以使用它来执行此操作,因为计时器启动了非UI线程,我不希望使用它来更新TextView。在您的情况下,计时器可以由处理程序类替换。您还可以避免这种新的非UI线程的开销。例如:

private Handler mHandler = new Handler();

OnClickListener mStartListener = new OnClickListener() 
{
   public void onClick(View v)
   {
      if (mStartTime == 0L) 
      {
        mStartTime = System.currentTimeMillis();
        mHandler.removeCallbacks(mUpdateTimeTask);
        mHandler.postDelayed(mUpdateTimeTask, 100);
      }
   }
};

.........

private Runnable mUpdateTimeTask = new Runnable() 
{
   public void run() 
   {
     final long start = mStartTime;
     long millis = SystemClock.uptimeMillis() - start;
     int seconds = (int) (millis / 1000);
     int minutes = seconds / 60;
     seconds     = seconds % 60;

     if (seconds < 10) 
     {
        mTimeLabel.setText("" + minutes + ":0" + seconds);
     } 
     else 
     {
        mTimeLabel.setText("" + minutes + ":" + seconds);            
     }

     mHandler.postAtTime(this,start + (((minutes * 60) + seconds + 1) * 1000));
   }
}; 
private Handler mHandler=new Handler();
OnClickListener mStartListener=新的OnClickListener()
{
公共void onClick(视图v)
{
如果(mStartTime==0L)
{
mStartTime=System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask,100);
}
}
};
.........
private Runnable mUpdateTimeTask=new Runnable()
{
公开募捐
{
最终长时间启动=mStartTime;
long millis=SystemClock.uptimeMillis()-开始;
整数秒=(整数)(毫秒/1000);
整数分钟=秒/60;
秒=秒%60;
如果(秒<10)
{
mtimelab.setText(“+分钟+”:0“+秒);
} 
其他的
{
mtimelab.setText(“+minutes+”:“+seconds”);
}
mHandler.posttime(这个,开始+((分*60)+秒+1)*1000));
}
}; 

当计时器启动一个非UI线程时,我不想用它来更新TextView。在您的情况下,计时器可以由处理程序类替换。您还可以避免这种新的非UI线程的开销。例如:

private Handler mHandler = new Handler();

OnClickListener mStartListener = new OnClickListener() 
{
   public void onClick(View v)
   {
      if (mStartTime == 0L) 
      {
        mStartTime = System.currentTimeMillis();
        mHandler.removeCallbacks(mUpdateTimeTask);
        mHandler.postDelayed(mUpdateTimeTask, 100);
      }
   }
};

.........

private Runnable mUpdateTimeTask = new Runnable() 
{
   public void run() 
   {
     final long start = mStartTime;
     long millis = SystemClock.uptimeMillis() - start;
     int seconds = (int) (millis / 1000);
     int minutes = seconds / 60;
     seconds     = seconds % 60;

     if (seconds < 10) 
     {
        mTimeLabel.setText("" + minutes + ":0" + seconds);
     } 
     else 
     {
        mTimeLabel.setText("" + minutes + ":" + seconds);            
     }

     mHandler.postAtTime(this,start + (((minutes * 60) + seconds + 1) * 1000));
   }
}; 
private Handler mHandler=new Handler();
OnClickListener mStartListener=新的OnClickListener()
{
公共void onClick(视图v)
{
如果(mStartTime==0L)
{
mStartTime=System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask,100);
}
}
};
.........
private Runnable mUpdateTimeTask=new Runnable()
{
公开募捐
{
最终长时间启动=mStartTime;
long millis=SystemClock.uptimeMillis()-开始;
整数秒=(整数)(毫秒/1000);
整数分钟=秒/60;
秒=秒%60;
如果(秒<10)
{
mtimelab.setText(“+分钟+”:0“+秒);
} 
其他的
{
mtimelab.setText(“+minutes+”:“+seconds”);
}
mHandler.posttime(这个,开始+((分*60)+秒+1)*1000));
}
}; 
在你的程序中尝试一下


在你的程序中尝试一下

我不得不实现类似的东西,并且发现android开发者的博客文章很有帮助。祝你一切顺利。我似乎无法让代码做任何事情。它让我创建了两个onClick监听器,mStartListener和mStopListener,但是代码没有显示它们被附加到任何东西上。当我把mStartListener连接到一个按钮上时,它会更新一次,并带有一些奇怪的数字,然后就是了。你还有你用来做这件事的代码吗?谢谢你的帮助。我不得不实现类似的东西,并且发现android开发者的博客文章很有帮助。祝你一切顺利。我似乎无法让代码做任何事情。它让我创建了两个onClick监听器,mStartListener和mStopListener,但是代码没有显示它们被附加到任何东西上。当我把mStartListener连接到一个按钮上时,它会更新一次,并带有一些奇怪的数字,然后就是了。你还有你用来做这件事的代码吗?感谢您的帮助。此答案可能是错误的,因为
currentTimeMillis
将返回1970年以来的时间,因此
millis
的值将为负值此答案可能是错误的,因为
currentTimeMillis
将返回1970年以来的时间,因此
millis
的值将为负值