0

カウントダウンタイマーを作ろうとしています。私はこのコードを思いつきましたが、最初はうまくいくと思いました。ただし、アプリを実行すると、修正方法がわからない2つのことが起こります...

  1. システムの時刻と日付ですが、61日だとわかっているのに61日ではなく60日しか残っていないと言っていましたが、同期していません!!
  2. アプリを閉じて戻ると、カウンターがリセットされます...

これについての助けをいただければ幸いです。これは、特定の個人的なプロジェクトのためのものではありません。

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView dateBx = (TextView) findViewById(R.id.textView1);
        final TextView mTextField = (TextView) findViewById(R.id.mTextField);
        final TextView minBx = (TextView) findViewById(R.id.minBx);
        final TextView hourBx = (TextView) findViewById(R.id.hourBx);

        //set todays date
        DateFormat dateFormat1 = new SimpleDateFormat("dd/MM/yyyy");
        Calendar cal1 = Calendar.getInstance();
        //target date
        DateFormat dateFormat2 = new SimpleDateFormat("dd/MM/yyyy");
        Calendar cal2 = Calendar.getInstance();
        cal2.set(2012,11,25);
        //set maths
        long time1 = cal1.getTimeInMillis();
        long time2 = cal2.getTimeInMillis();
        //difference variable
        long diff = time2 - time1;
        //equations
        long diffSec = diff / 1000;
        long dMins = diff / (60 * 1000);
        long dHour = diff / (60 * 60 * 1000);
        long dDay = diff / (24 * 60 * 60 * 1000);

       new CountDownTimer(diff, 1000) 
       {

             public void onTick(long millisUntilFinished) 
             {
                 mTextField.setText("Seconds remaining: " + millisUntilFinished / 1000);
                 dateBx.setText("Days remaining: " + millisUntilFinished / (24 * 60 * 60 * 1000));
                 minBx.setText("Minutes remaining: " + millisUntilFinished / (60 * 1000));
                 hourBx.setText("hours remaining: " + millisUntilFinished / (60 * 60 * 1000));
             }

             public void onFinish() {
                 mTextField.setText("done!");
             }
          }.start();



}

私のコードは、Java と Android で学んだいくつかのことを組み合わせたものです。すべてを一緒に行うより良い方法を考えている場合は、お知らせください:)

ありがとう

4

2 に答える 2

1

Android はリアルタイム OS ではないため、タイマーが 1000 ミリ秒ごとに正確に実行されることを数えることができます。

最も実用的な方法は、呼び出しごとに現在の日付を取得し、目標の日付を取得して、残りの日数/時間/分/秒を再計算することです (アプリの開始時と同じように)。

これにより、アプリを閉じたり開いたりするときの問題も解決します。

于 2012-10-25T22:04:09.977 に答える