1.コンテンツプロバイダーはスレッドセーフではありません
デフォルトでは、コンテンツプロバイダーはスレッドセーフではありません。コンテンツプロバイダーを使用する複数のスレッドがある場合、スローされるさまざまな例外やその他のデータの不整合を確認できます。これを修正する最も簡単な方法は、コンテンツプロバイダーによって公開されている各パブリックメソッドでsynchronizedキーワードを使用することです。
このようにして、一度に1つのスレッドのみがこれらのメソッドにアクセスできます。
2.たくさんの書き込みをするときは上手にプレイしてください
新しいサーバルマップアプリケーションでは、バイナリファイルからアプリケーションが内部で使用するデータベースにデータをインポートする必要があります。これを実行し、アプリケーションの残りの部分とうまく連携するには、次のことを行うのが最善です。
他のスレッド、特にUIの更新を担当するスレッドに悪影響が及ばないように、新しいスレッドを生成してインポートを実行します。各インポートの最後で一時停止して、同期されたメソッドを使用する必要がある他のスレッドにチャンスを与えます。
3.コンテンツプロバイダーはあなたに時々横方向に考えることを強制します
Androidのコンテンツプロバイダーが機能する方法は、コードの残りの部分と基盤となるデータベースの間に抽象化レイヤーを提供することです。これは主に、私が知る限り、コンテンツプロバイダーがデータベース以外の場所からデータにアクセスできるという事実によるものです。
つまり、基になるデータベースで生のSQLクエリを実行することはできず、クエリメソッドなどのさまざまなメソッドに渡される変数を使用してSQLクエリのさまざまなコンポーネントを指定する必要があります。SQLがコンテンツプロバイダーによって処理される方法に適合しないタスクがある場合、2つのオプションがあります。
クエリについて横方向に考えてください。別のクエリを実行し、カーソルから結果にアクセスすることで、必要なデータを取得できる可能性があります。データに通常どおりアクセスするためのURIと、代替手段がないタスクの特定のクエリに一致する特別なURIを使用します。