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