0

SQLServerデータベースによって取得された一連のデータを必要とするAndroidアプリケーションを実装しました。アプリケーションは、WSを呼び出すデータを取得します。アプリケーションが最初に起動したときにWSを最初に呼び出した後、サーバー側(SQLサーバーデータベース)で発生する可能性のある変更に応じて、データを更新して維持する必要があります。この結果を取得するために、データベース上のデータが変更されたかどうかを知るために、事前定義された頻度でWS呼び出しを実行します。新しいデータが利用可能な場合、それらを取得するために他のWebサービスが呼び出されます。

このソリューションは私にとっては問題なく機能します(リアルタイムの更新は必要ありません)。しかし、このソリューションは、エネルギー消費、CPU消費、およびネットワークトラフィックの点で高すぎると思います。なぜなら、これは非常に一般的な問題であり、それに対処するための一般的な方法が存在するかどうかを知っていると思います。

4

3 に答える 3

1

ほとんどの場合、あなたがすることは大丈夫です。Google Cloud Messagingを利用できますが、実装するには時間と労力が必要です。私はあなたの解決策にとどまります。

于 2013-02-21T08:54:27.240 に答える
1

追加のフィールドを使用することをお勧めします。Androidのローカルテーブルに4つの列を追加します。

  • TRANSACTING_FLAG:このリソースをサーバーに投稿または更新する場合は、trueに設定してください
  • REQUEST_STATE:このフラグをPOST / UPDATING/DELETINGなどに設定します。
  • RESULT_CODE:このフィールドを、この特定のリソースについてサーバーが受信した最後の結果コードに設定します。
  • タイムスタンプ:データを更新する必要がある後の期間

ワークフローは単純です。サーバーのデータを取得するときは、リソースの最後に更新されたタイムスタンプが以前に定義したキャッシュタイムスタンプよりも優れているかどうかを確認してください。タイムスタンプが優れている場合は、データを更新する要求を実行します。トランザクションブール値は、特定のリソースが実際にサーバーと同期していることを通知します。結果コードは、リクエストが失敗したかどうかを通知し、ネットワークが利用可能になったときに意図的に再試行します。このようにすると、ローカルデータベースとリモートデータベース間の永続性が維持されます。これは、前に表示された追加のフィールドのおかげで、いつでもローカルリソースの「同期状態」を確認できるためです。

これを処理するためのライブラリを作成しました。RESTDroidを見てください。キャッシュ機能が処理されていない場合でも、簡単に追加できます。

于 2013-02-21T09:33:48.107 に答える
0

SqlDependency(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx )のようなものを使用して、クエリ通知を調べることができます。これを使用して、クエリの結果が変更されたかどうかを追跡し、変更が発生したときにアプリケーションに通知できます。

使用できるクエリには制限があり、サーバーのコストはインデックス付きビューと同様です。ちなみに、これには.NETが必要です。Webサービスに実装する場合は、通知をプッシュできるように、Androidに何らかのサブスクライブ機能を実装する必要があります。

変更のチェックのコストを削減する別のオプションは、SQLServerの変更の追跡です-http://msdn.microsoft.com/en-us/library/bb933875.aspx

于 2013-02-21T09:06:27.027 に答える