0

カウントダウンを表示するウィジェットがあります。これを行うには、クラス CountDownTimer を使用しますが、問題は、カウントダウンが頻繁に停止することです! Androidが何時間もカウントダウンしているため、スレッドが自動的に停止するためだと思います。どうすればこの問題を解決できますか? ありがとう

public class TempoIndietro extends CountDownTimer{
     AppWidgetManager manager;
     ComponentName thisWidget;

    public TempoIndietro(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        thisWidget = new ComponentName(context, widget.class); 
        manager = AppWidgetManager.getInstance(context);  
        remoteView = new RemoteViews(context.getPackageName(),R.layout.widgett);
    }

    @Override
    public void onFinish() {
    remoteView.setTextViewText(R.id.textView2, context.getResources().getString(R.string.onair_widget_countdown));
        manager.updateAppWidget(thisWidget, remoteView);
            }

            @Override
            public void onTick(long millisUntilFinished) {
                SimpleTimeFormat tf = new SimpleTimeFormat("$dd$ : $HH$: $mm$: $ss$");    
                String risultato = tf.format(millisUntilFinished); // arg0 tempo
                remoteView.setTextViewText(R.id.textView2, risultato);
                manager.updateAppWidget(thisWidget, remoteView);
            };
        }
4

1 に答える 1

0

タイマーの開始時間を覚えておいて、その時間との差を計算してください。

これにはローカル ストレージを使用できます。

アクティビティ内の onStop() と onResume() で呼び出すのが最善です。

保存:

SharedPreferences settings = getSharedPreferences("myappname", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putLong("varname", startDate.getTime());
editor.commit();

取得:

SharedPreferences settings = getSharedPreferences("myappname", 0);
Long millis = settings.getLong("varname", null);
Date startDate = new Date(millis);
于 2012-04-19T22:24:16.313 に答える