我需要一些关于此代码的建议:
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监视器已被禁用。
答案 0 :(得分:3)
您的代码每秒创建一个Runnable,一个Date和两个DateFormat对象。字符串操作也可以创建一些对象。一旦Runnable完成那些被切断的松散(Runnable之外没有任何东西可以引用它们)并且有资格进行垃圾收集。你不需要做任何进一步的事情来释放他们的记忆。在每个Runnables完成后,您应该看到内存使用量返回到同一级别。
垃圾收集不是立竿见影的。只要你没有看到持续的上升趋势,它就可以了。