いくつかのAndroidアクティビティとAndroidサービスの間で使用されるシングルトンを作成することは悪い考えでしょうか。私が静的なフィールドを知っている限り、私の場合、Singletonはプロセス全体が生きている限り利用可能です。Android:アクティビティとサービスの間で使用されるシングルトン
私の計画は、私の活動とバックグラウンドサービスとの間でデータを共有するために、パーセル可能ではなくシングルトンを使用することです。だから私のActivity1は、MySingleton.getInstance()を呼び出してデータを追加します。addData(foo);新しいデータがシングルトンに追加されたことを私のサービスに知らせるためにインテントを送りました。次に、私のBackgroundServiceがインテントを処理し、MySingleton.getInstance()。getLatestData();を呼び出します。データを処理します(時間がかかります)。次に、シングルトンを使用してサービスの結果を「ポスト」し、アクティビティ1によって処理されるブロードキャストインテントを起動し、アクティビティ1がシングルトンから結果を取得します。
あなたはそれが悪い考えだと思いますか?
編集: 私が実装したいのは、Webサーバーからデータをダウンロードして結果を返すソフトウェアの平和です。したがって、私のアクティビティはDownloadJobオブジェクトを作成します。 DownloadJob-Objectは、すべてのDownloadJobをキューに入れて管理するDownloadScheduler(Singleton)に入れられます。 DownloadSchedulerは5つのDownloadJobを同時に実行し、待ち行列を使用して待機を保存することができます。効果的なダウンロードはDownloadService(IntentService)によって行われ、Intentを介して今すぐ新しいDownloadJobを実行(ダウンロード)する必要があることが通知されます。 DowanlodServiceは、DownloadSchedulersキュー(PriorityBlockingQueue)から次のジョブを取得し、DownloadJob.setResult(...)を設定してResultを返し、結果が準備完了であることを示すブロードキャストインテントを起動し、DownloadSchedulerによって受信されますジョブをキューから取り出して、ダウンロードが完了したことをアクティビティに通知します。
私のシナリオでは、DownloadJob Parcelableを作成してIntentで渡す代わりに、DownloadServiceからDownloadJobsにアクセスするシングルトンを使用します。だから、私はメモリ内に2つのDownloadJobを持っている( "活動サイト"と "サービスサイト"の2つ)という問題を回避します。
これを解決する方法を教えてください。
DownloadScheduler(Singleton)のような静的インスタンスは、アンドロイドシステムによってメモリが解放されて使用されるのは本当ですか?したがって、アプリケーションをサブクラス化し、この問題を避けるために参照(静的ではない)を保持しますか?
はい、Androidでは、あなたのプロセスはいつでも消滅し、データを永続的なストアに保存してから、コンテンツプロバイダをインターフェイスとして書き込むことはできません。 –
私はデータを永続的に保存するためネットしません。私はActivitisがいくつかのオブジェクトを入れ、サービスがそれらを取得して何らかの作業をしてから結果を返すキューを用意するだけです。 – sockeqwe