私は 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. どのような種類のスレッドを使用すればよいですか? それらについて読んだことがありますが、それらはすべて長時間の操作用のようです。
この質問をお読みいただき、誠にありがとうございます。お役に立てれば幸いです。もっと知りたいことやもっと見たいコードがある場合は、コメントを残してください。