0

私はlingochamp filedownloader libraryを使用して、さまざまなアクティビティからファイルをダウンロードするダウンロードマネージャアプリケーションを開発しています。Android Filedownloaderライブラリ:ダウンロードしたファイルのリスト/履歴を維持するには?

はここで、私がダウンロードしたファイルの履歴を保持したいのですが、a discussion hereによると、ライブラリーは、ファイルのようなリストを保持しません。

だから、私はリストを移入して、共有設定を使用して保存&をJSONに変換するGsonを使用するのではと思っています。

ダウンロードが開始、一時停止、キャンセル、または完了するたびに、json文字列がリストに変換され、リストが更新されてjsonに戻されます。しかし、同じリストにアクセスする複数のアクティビティがあるので、データの不一致を招く同時実行性の問題がある可能性があります。

私は同じように開発する必要がありますか?あるいは上記のアプローチが間違っていて、より良いアプローチがありますか?

答えて

0

onStart()とonStop()またはonResume()/ onPause()の間のプリファレンスにのみアクセスする場合は、並行処理の問題は発生しません。したがって、異なるスレッドを使用して環境設定にアクセスする場合にのみ発生します。それでも、私はSharedPreferencesが何も変更せずにそれを処理できるかもしれないと思う。少なくとも私はそれに問題があったことに気づいていません。

とにかく。同時性の問題がある場合は、SharedPreferencesをSingletonオブジェクトにラップし、Historyオブジェクトの同期インスタンスにアクセスすることができます。その後、誰かがデータを追加して履歴オブジェクトを変更すると、他のコンポーネントがアクセスできるようになります。次に、ラッパーのインスタンスをインスタンス化するときに、一度だけプリファレンスからデータを読み取る必要があります。

また、このデータを保存するには、sqliteのようなものを使用する必要があります。これは、環境設定でこれを保存すると、SharedPreferencesが意味するものとは異なるため、変更するとすべてのデータを取得し、または1つのエントリを追加します。そして、私はこのアプローチを複数の機会に使用しており、少量のデータに対してはうまく機能することを否定しません。

関連する問題