1

我正在开发一个有 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. 我应该使用什么样的线程?我已经阅读过它们,但它们似乎都适用于冗长的操作。

我非常感谢您阅读这个问题,希望您能帮助我。如果您想了解更多信息或想查看更多代码,请发表评论。

4

0 回答 0