我正在开发一个我有ListView的应用程序,在某些情况下我想每秒更新一次。我这样做的原因是我想告诉用户在确定事件发生之前剩下多少秒。我设置了CountDownTimer
,每秒呼叫adapter.notifyDataSetChanged();
一次。这会导致我getView()
的{{1}}被调用。我有这段代码:
ListAdapter
此代码每秒可调用15次(在非常极端的情况下,但它仍然是可能的),这导致我的 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++;
在接受输入时遇到一些麻烦。
显而易见的答案是将代码放在一个Thread中,但我先问了一些问题:
1. UIThread
是应该放入一个线程还是应该将带有日历和Longs的长代码放入线程?我不确定adapter.notifyDataSetChanged();
是否能解决问题。
2.因为我使用的代码相当轻量级而且问题只发生在经常被调用的时候才会创建一个Thread因为初始化时间而慢下来?
3.我应该使用什么样的线程?我已经读过它们,但它们似乎都是为了漫长的操作。
我非常感谢你阅读这个问题,希望你能帮助我。如果您想要了解更多信息或想要查看更多代码,请发表评论。