0

「和時計」(略してJTT)を表示するアプリケーションを書いています。いくつかのコンポーネント(通知、ウィジェット、アプリケーション自体、アラーム)があり、それらはすべて同じデータ(現在のJTT)を使用します。

私の現在のバージョンは、すべての計算を実行する単一のサービスを使用し、ハンドラーを使用して、「ティック」、模倣について全員に通知しACTION_TIME_TICKます。

ただし、アラームを使用する場合は、「通常の時間」をJTTに、またはその逆に変換する方法も必要です。計算はCPUにかなりの負荷がかかるため(すべて日の出と日の入りに基づいています)、すべてを1つの場所で実行してからキャッシュすることをお勧めします(日の出と日の入りの時刻を知っているものの計算はそれほど重くありません)。

だから私は今それをするいくつかの方法があります:

  • すべてを稼働させてください
    • そして、バインディングを使用して、必要なデータを要求します。実際にはすでに1つのケースで行われており、非同期応答を処理する必要があるため、少し面倒に思えます
  • コンテンツプロバイダーに移動する
    • ブロードキャストの代わりにコンテンツオブザーバーを使用します
    • またはプロバイダーからブロードキャストを送信します
  • 両方の方法を組み合わせる
    • コンテンツプロバイダーを使用してサービスのデータを計算し、サービスは必要に応じてデータをブロードキャストします

どちらが良いでしょうか?多分何か他のもの?

4

2 に答える 2

0

私は「ただのサービス」に固執しています-私は一般的な放送で私が抱えていた問題を実際にカバーするスティッキー放送を発見しました(登録後、最初の「ダニ」を取得する前にサービスから最新のデータを要求する必要があります)そしてそれは私に多くを残します実際のサービス接続が必要な場合は少なくなります。

于 2012-12-14T22:38:01.970 に答える
0

コンテンツプロバイダーは構造化データ用であるため、実際にはユースケースに適合しません。「非同期応答」の意味がわかりませんか?リモートサービスの呼び出しは通常、ローカル関数呼び出しと同じであり、完了するとブロックされて値が返されます。複数のコンポーネントに通知する必要がある場合は、ブロードキャストが最適です。すべてのコンポーネントが同じプロセスにある場合はLocalBroadcastの使用を検討し(Androidサポートライブラリのソースを確認してください)、システム全体(通常の)コンポーネントを送信する必要がある場合は、他のアプリがそれを取得できないようにアクセス許可を設定します。

于 2012-12-13T04:04:00.570 に答える