1

私は ListView を持っているアプリケーションに取り組んでおり、状況によっては毎秒更新したいと考えています。これを行っている理由は、特定のイベントが発生するまでの残り秒数をユーザーに伝えたいからです。毎秒 1 回CountDownTimer呼び出すを設定しました。adapter.notifyDataSetChanged();これにより、getView()my のListAdapterが呼び出されます。そこに私はこのコードを持っています:

            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++;

このコードは 1 秒間に 15 回呼び出される可能性があり (非常に極端な場合ですが、それでも可能性はあります)、UIThread入力の受け入れに問題が発生します。

これに対する明白な答えは、コードをスレッドに入れることですが、最初にいくつか質問がありadapter.notifyDataSetChanged();ます。adapter.notifyDataSetChanged()トリックを行うかどうかはわかりません。2.私が使用しているコードはかなり軽量であり、非常に頻繁に呼び出されたときにのみ問題が発生するため、初期化時間のためにスレッドが遅くなるだけですか? 3. どのような種類のスレッドを使用すればよいですか? それらについて読んだことがありますが、それらはすべて長時間の操作用のようです。

この質問をお読みいただき、誠にありがとうございます。お役に立てれば幸いです。もっと知りたいことやもっと見たいコードがある場合は、コメントを残してください。

4

0 に答える 0