私と私のAndroidチームには問題があります。ユーザーの連絡帳を拡張情報とともに表示するアプリがあります。
現在の設定
私たちのアプリは、AndroidOSの連絡先プロバイダーを読み取ります。この情報をサーバーに送信し、サーバーが必要なフィールドをいくつか計算します。この情報は後でアプリによって取得され、SQLiteデータベースに保存されます。最終的にデータベースに格納されるのは2つのテーブルです。サーバーが計算したすべての番号とすべての追加情報を含む1つ。もう1つのテーブルは、すべての連絡先を含むテーブルです(1つの連絡先は複数の番号を持つことができます)。この連絡先テーブルは、パフォーマンスのためにのみ作成されました。ユーザーに連絡先帳を提示するときに、CursorAdapterのこの連絡先テーブルのすべての行をカーソルで選択することができます。したがって、連絡先帳をユーザーに提示するときは、独自のSQLiteデータベースと1つのテーブル(JOINなしなど)から読み取るだけで済みます。
主な問題
多くの同期が行われています。データが複製されているため、追加/変更/削除を確認し、すべてのf-ing時間を同期する必要があります。さらに、プレゼンテーション層で特定のものを変更しようとしているときは、この特定の情報を含めるように連絡先テーブルを変更する必要があります。
私たちの優先事項
1番目:ユーザーに連絡帳を提示するときのパフォーマンス。
2番目:コードの保守性。
したがって、「データを複製しないでください。これがすべての問題の根本です」とコメントしないでください。開発者として優れた同期アルゴリズムを作成するために余分な時間を費やす必要がある場合よりも、ユーザーにパフォーマンスの問題がないことが重要です。
ソリューション?
理由はわかりませんが、CursorAdapter(1つのテーブルからすべての行を読み取る)の方が、オブジェクトのリスト(メモリに保持されている)を持つArrayAdapterよりもはるかに優れていると常に思っていました。これが本当かどうか誰か知っていますか?少なくとも半分の方法で役立つ解決策の1つは、起動時に連絡先プロバイダー(ネイティブの連絡先帳)と拡張情報に参加し、これをメモリ内のリストに保存して、ArrayAdapterで提示することです。
独自のコンテンツプロバイダーを作成しますか?独自のコンテンツプロバイダーを作成することについてはほとんど知りません。誰もがネイティブコンタクトブックの情報を拡張してこれらに参加するコンテンツプロバイダーを作成しようとしました。たぶん、このインターフェースの実装で:ContactsContract.DataColumnsWithJoins?誰かが似たようなことを試みましたか?この情報をCursorAdapterに表示するときのパフォーマンスはどうですか?
忘れてしまったかもしれない情報があれば、質問してください。質問を更新します。
すべての役立つヒントと解決策を事前に感謝します!