【发布时间】:2017-09-03 13:28:56
【问题描述】:
我需要一些关于这段代码的建议:
Thread myClock = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
Date dt = new Date();
SimpleDateFormat myClockDate = new SimpleDateFormat("EEE, dd MMM yyyy");
SimpleDateFormat myClockTime = new SimpleDateFormat("hh:mm aa");
myClock_date.setText("Date: " + myClockDate.format(dt));
myClock_time.setText("Time: " + (myClockTime.format(dt)).replace(".", ""));
}
});
}
} catch (InterruptedException e) {
}
}
};
它运行良好,但是当线程运行时,内存监视器显示使用率持续上升和下降。不运行时,显示器呈扁平状。
我想知道是否是导致此问题的日期对象的持续创建?是否需要销毁或释放?
PS:GPU 监视器已被禁用。
【问题讨论】:
-
不要在“while”中创建任何对象。
-
嗨,克里姆。那么,WHILE 循环中应该保留什么?这是必需的,对吧?
-
你为什么担心?我想我不会。
-
我没有看到避免在每次迭代中创建
Date的直接方法@KerimFIRAT。当然,这两个SimpleDateFormat对象可以在循环之前创建一次。 -
顺便说一下,您正在使用的麻烦的遗留日期时间类是不是线程安全的。使用它们的替代品,线程安全的java.time 类。
标签: java android multithreading date java-threads