ユーザーがウィジェットをホーム画面に配置すると、ウィジェットに関する情報を書き込むサービスを作成しました (情報は構成アクティビティから取得されます)。また、ユーザーが設定したウィジェットの数も書き留めます。
ユーザーがウィジェットを削除したら、共有設定でその情報を削除します。
私が経験したことは、ユーザーがたとえば 2 つのウィジェットを配置し、1 つを削除してからもう一度配置し、これらすべてのアクションを高速に実行すると、共有設定ファイルが一貫性のない値を取得することです。うまくいくこともありますが、ほとんどの場合、間違った値で立ち往生します。
apply() を使用しています。commit を試しましたが、同じことが起こります。
共有設定に保存する値は、システムが機能するために重要です。それがないと、設定に書き込まれたユーザー構成に基づいてインターネットからの情報によってバックアップされるため、ウィジェットは役に立ちません。
データベース ソリューションへの切り替えはより信頼性が高いですか、それともこの「競合状態」を修正する他の実行可能なソリューションですか? (おそらく私自身の同期メカニズムを強制するかもしれませんが、ドキュメントから理解している限り、apply()はすでに同期されており、読み取り/書き込みは最初にRAMに移動する必要があります。これにより高速になり、次のような問題が発生することはありませんこれは、ユーザーが物理的にウィジェットを削除して新しいウィジェットを 2 ~ 3 秒以内に配置することができないためです!)