2011-06-23 3 views
0

私はブールisActionを持っているとしましょう。私のサービスでは、何らかの種類のタイマーメカニズムを実行したいと思います。このブール値が状態を変更する場合は、関数Xを呼び出してください。Androidサービス - 変数が時間の経過とともに非同期に変更されるかどうかを確認しますか?

これを行うにはどうすればよいでしょうか?私は、無駄にタイマを使用しようとしたと私はブール値が前後に状態を変更する可能性があるので、これを行うにはpostDelayedのハンドラが適切かどうかわからない、それは私に "偽陽性" isActionは決して変化しません。

詳細情報については、インテントが解雇され、サービスが開始されます。このサービスは、boolean isActionが約1秒間同じ状態を維持するかどうかを判断する必要があり、そうであれば何らかのアクションを行い、それ以外の場合は何もしません。

ありがとうございました。

答えて

1

好み。詳細については、ドキュメントをご覧ください。http://developer.android.com/reference/android/content/SharedPreferences.html

+0

これは全く同じ解決策です。 Oberser-Observableパターンですが、これはsharedPreferenceMechanismを使用しています。イベントメカニズムのソース部分を実装する必要がないように、より軽いコードを与えるかもしれませんが、プロパティの変更を通知するためにSharedPreferencesを常に使用するアーキテクチャ上の選択肢としてakwardを使うことができます。 – Snicolas

+0

Trueしかし、もしその真偽値が1つだけ真実ならば、それを確実に追跡するのは間違いなく簡単です!私は一般に、Observer-Observable partternを使用するのは、 です。1.抽象化には2つの側面があり、それぞれに依存します。別のオブジェクトにこれらの側面をカプセル化することで、それらを個別に変更して再利用することができます。 2. 1つのオブジェクトを変更する際に他のオブジェクトを変更する必要があり、変更が必要なオブジェクトの数がわからない場合。 3.オブジェクトが誰であるかを前提にせずに、他のオブジェクトに通知できる必要がある場合。言い換えれば、これらのオブジェクトが緊密に結合されることは望ましくありません。 – Kenny

1

サービスは時々刻々と目を覚まし、ブール値の変更をチェックすることはできません。あなたが言うように、それは "偽陽性"を与える可能性があります。

解決策は、ブール値が変更されたときにイベントを発生させるobservable-observer design patternと、イベントソース(観測可能)に対してサービスを登録するサービスを配置することです。

したがって、定期的なチェックは必要ありません。サービスは、発生するとすぐにブール値の変更を認識します。

サービスに値の変更を通知する直接メソッド呼び出しを配置することもできますが、サービスが常に開始されることを意味します。そうかもしれない。このような状況では、アクティビティをサービスにバインドし、IBinderインターフェイスを介してそのメソッドを呼び出す方がよいでしょう。私は最近、共有設定にブール値を格納することによって、同じようなことが、私はその後、変更はに起こったときに呼び出されるコールバックを登録しますregisterOnSharedPreferenceChangeListenerを実施しなかった

よろしく、 ステファン

ステファン

関連する問題