我正在开发一个有 ListView 的应用程序,在某些情况下我想每秒更新一次。我这样做的原因是我想告诉用户在确定事件发生之前还剩多少秒。我已经设置了一个每秒CountDownTimer
调用一次的方法。adapter.notifyDataSetChanged();
这导致getView()
myListAdapter
被调用。我有这段代码:
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(Calendar.YEAR, calendar1.get(Calendar.YEAR));
calendar1.set(Calendar.MONTH, calendar1.get(Calendar.MONTH) + 1);
calendar1.set(Calendar.DAY_OF_MONTH, calendar1.get(Calendar.DAY_OF_MONTH));
calendar1.set(Calendar.HOUR, calendar1.get(Calendar.HOUR));
calendar1.set(Calendar.MINUTE, calendar1.get(Calendar.MINUTE));
calendar1.set(Calendar.SECOND, calendar1.get(Calendar.SECOND));
int positionComp = pos + 1;
int positionFix = (length - positionComp) + 1;
String year = Resource.getSavedString(Integer.toString(positionFix) + Resource.KEY_YEAR, "0");
String month = Resource.getSavedString(Integer.toString(positionFix) + Resource.KEY_MONTH, "0");
String day = Resource.getSavedString(Integer.toString(positionFix) + Resource.KEY_DAY, "0");
int yearI = Integer.parseInt(year);
int monthI = Integer.parseInt(month);
int dayI = Integer.parseInt(day);
calendar2.set(Calendar.YEAR, yearI);
calendar2.set(Calendar.MONTH, monthI);
calendar2.set(Calendar.DAY_OF_MONTH, dayI);
calendar2.set(Calendar.HOUR, 0);
calendar2.set(Calendar.MINUTE, 0);
calendar2.set(Calendar.SECOND, 0);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffSeconds = diff / 1000;
long diffDays = diffSeconds / (24 * 60 * 60);
diffDays++;
这段代码每秒可以调用 15 次(在非常极端的情况下,但它仍然是一种可能性),这导致我UIThread
在接受输入时遇到了一些麻烦。
显而易见的答案是将代码放入线程中,但我首先有一些问题: 1. 应该adapter.notifyDataSetChanged();
放入线程中还是应该将带有日历和 Long 的长代码放入线程中?我不确定是否adapter.notifyDataSetChanged()
会成功。2. 由于我使用的代码是相当轻量级的,而且只有在经常调用它时才会出现问题,所以创建一个线程只是因为初始化时间而减慢它的速度?3. 我应该使用什么样的线程?我已经阅读过它们,但它们似乎都适用于冗长的操作。
我非常感谢您阅读这个问题,希望您能帮助我。如果您想了解更多信息或想查看更多代码,请发表评论。