Java 在Android中以秒为单位更新时间和日期
我想在文本视图中实时显示时间和日期(按分钟更新)。目前,我有这个。考虑到内存使用和Android最佳实践,这是最好的方法吗?(注意:Java 在Android中以秒为单位更新时间和日期,java,android,Java,Android,我想在文本视图中实时显示时间和日期(按分钟更新)。目前,我有这个。考虑到内存使用和Android最佳实践,这是最好的方法吗?(注意:DateFormat是java.text.DateFormat) 您可能可以使用处理程序将更新发布到UI线程。查看此更新计时器的最佳实践 与其设计自己的计时器来处理此问题,我建议使用广播接收器列表来显示每分钟发送一次的意向广播集: 如果您想知道如何执行此操作的示例代码,请告诉我。我将使用Runnable并将其延迟发布到处理程序 public class ClockA
DateFormat
是java.text.DateFormat
)
您可能可以使用处理程序将更新发布到UI线程。查看此更新计时器的最佳实践
与其设计自己的计时器来处理此问题,我建议使用广播接收器列表来显示每分钟发送一次的意向广播集:
如果您想知道如何执行此操作的示例代码,请告诉我。我将使用Runnable并将其延迟发布到处理程序
public class ClockActivity extends Activity {
private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
private TextView mClock;
private boolean mActive;
private final Handler mHandler;
private final Runnable mRunnable = new Runnable() {
public void run() {
if (mActive) {
if (mClock != null) {
mClock.setText(getTime());
}
mHandler.postDelayed(mRunnable, 1000);
}
}
};
public ClockActivity() {
mHandler = new Handler();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mClock = (TextView) findViewById(R.id.clock_textview);
startClock();
}
private String getTime() {
return sdf.format(new Date(System.currentTimeMillis()));
}
private void startClock() {
mActive = true;
mHandler.post(mRunnable);
}
}
似乎
ACTION\u TIME\u TICK
不允许我在第二秒内更新。在这方面,在我看来,使用广播接收器就像是鲁比·戈德伯格(Rube Goldberg)这样做的一种方式。没错,“行动时间”每分钟、每分钟都在更新。但是,如果您希望更新textview以按分钟显示日期和时间,它应该执行您需要它执行的任务。
public class ClockActivity extends Activity {
private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
private TextView mClock;
private boolean mActive;
private final Handler mHandler;
private final Runnable mRunnable = new Runnable() {
public void run() {
if (mActive) {
if (mClock != null) {
mClock.setText(getTime());
}
mHandler.postDelayed(mRunnable, 1000);
}
}
};
public ClockActivity() {
mHandler = new Handler();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mClock = (TextView) findViewById(R.id.clock_textview);
startClock();
}
private String getTime() {
return sdf.format(new Date(System.currentTimeMillis()));
}
private void startClock() {
mActive = true;
mHandler.post(mRunnable);
}
}