6

どうすればそれを適切に行うことができますか?

私はストップウォッチを持っていて、その状態を保存してonSaveInstance復元していonRestoreInstanceます...

今、私は次の問題を抱えています:スレッドを停止しonSaveInstance、画面がロックされているかオフになっている場合onRestoreInstance、呼び出されず、ストップウォッチが続行
されません...停止しないと、ストップウォッチはバックグラウンドで実行され、画面がオフのときやアクティビティがアクティブでなくなったときでも...

では、そのようなことを処理する通常の方法は何ですか?

PS:私は、イベントで実行中の状態を保存し、イベントでスレッドを再起動
するためのローカル変数という実用的なソリューションさえ持っています...しかし、Androidシステム自体を使用する「デフォルト」ソリューションがあるかどうかはまだ知りたいです.. ..onStoponStart

4

2 に答える 2

2

Ok。私は今、あなたが何をしているのかをよく理解しています。スレッドを使ってカウントしていると思いました。現在、UI の更新に使用しているようです。

代わりに、おそらく行うべきことは、自己呼び出しを使用することHandlerです。 Handlerは、非同期で実行できる気の利いた小さなクラスです。それらは多様性があるため、Android のいたるところで使用されています。

static final int UPDATE_INTERVAL = 1000; // in milliseconds. Will update every 1 second

Handler clockHander = new Handler();

Runnable UpdateClock extends Runnable {
   View clock;

   public UpdateClock(View clock) {
      // Do what you need to update the clock
      clock.invalidate(); // tell the clock to redraw.
      clockHandler.postDelayed(this, UPDATE_INTERVAL); // call the handler again
   }
}

UpdateClock runnableInstance;

public void start() {
   // start the countdown
   clockHandler.post(this); // tell the handler to update
}

@Override
public void onCreate(Bundle icicle) {
   // create your UI including the clock view
   View myClockView = getClockView(); // custom method. Just need to get the view and pass it to the runnable.
   runnableInstance = new UpdateClock(myClockView);
}

@Override
public void onPause() {
   clockHandler.removeCallbacksAndMessages(null); // removes all messages from the handler. I.E. stops it
}

これが行うことは、実行される にメッセージを投稿することHandlerです。この場合、1 秒ごとに投稿されます。利用可能なときに実行されるメッセージ キューがあるため、わずかな遅延があります。Handlersそれらは作成されたスレッドでも実行されるため、UI スレッドで作成すると、複雑なトリックなしで UI を更新できます。のメッセージを削除してonPause()、UI の更新を停止します。時計はバックグラウンドで実行し続けることができますが、ユーザーには表示されなくなります。

于 2013-01-17T15:55:26.637 に答える
0

onRestoreInstanceAndroid プログラミングを始めたばかりですが、あるアクティビティから別のアクティビティに切り替えていないため、その状況で呼び出されるとは思いません。あなたの最善の策は、必要に応じて呼び出すonPausewhich を呼び出すことだと思いますが、 which を呼び出す場合と呼び出さonSaveInstanceない場合がある を使用onResumeしますonRestoreInstance

于 2013-01-17T14:37:07.540 に答える