0

アクティビティからサービスにデータを渡したいのですが。現在、を使用しようとしていますArrayList<HashMap<String, String>>。これをサービスに渡すためにどのようなオプションがありますか?余分なデータとしてインテントに入れることを考えていましたが、どうすればいいのかわかりません。または、これをある種のグローバルとして設定することは可能ですか?

現時点では、アクティビティの静的として設定されており、サービスは、ArrayListからの次のアイテムで提供されるアクティビティにコールバックしています。それがどのように機能しているかに満足していないので、リストをサービスに移動したいと思います。

編集

以下に提起された質問への回答:

プレイリスト(うん、別のメディアアプリ)をサービスに渡そうとしています。プレイリストArrayList<HashMap<String, String>>は、「songTitle」、「thisisatitle」などのペアの曲情報を制限します。

しかし、私はアプリケーションのライフサイクルに混乱していると思います。ユーザーが[再生]をクリックすると、サービスが作成されます。リストにスタティックを使用した場合、サービスが作成されると、そのリストが表示されます。そのため、サービスはこのリストの曲を引き続き喜んで再生します。ただし、ユーザーがフォルダなどを変更した場合、アプリにプレイリストの変更を認識させるにはどうすればよいですか?アプリの設計方法により、ユーザーはいつでもリスト内のトラックのチェックを外したり、別のフォルダーを参照したりできます。曲が完成したら、新しいリストをロードする必要があります。それを行うための最良の方法は何ですか?それとも、私が今やっている方法が最善の方法ですか?曲が完成したら、次のトラックを要求するメインアクティビティにブロードキャストを送り返します。この時点でサービスを破棄し、「次の曲」機能で再作成できるようにする必要がありますか?

ライフサイクルの混乱!

4

2 に答える 2

1

データをデータベースに保存し、データが変更されたという意図を単純に送信することを検討しましたか?または、データが変更されてリロードする必要があることを「それ自体」で通知するContentProviderを使用しますか?そうすれば、アプリが予期せず閉じた場合でも状態を使用できなくなります。

于 2012-10-24T07:09:32.687 に答える
1

ArrayListHashMapimplementの両方なので、構造を Intent に詰め込み、 Intent.getSerializableExtra()Serializableを使用して取得できるはずです。

アクティビティから、Intent.putExtra(String name, Serializable value)オーバーロードを呼び出すだけです。

経験則として、可能であれば、静的変数がアプリケーションにぶら下がるのを避けるようにしてください。アプリが OS によってシャットダウンされてから再作成されると (つまり、最近のアプリ リストから)、注意が必要です。

于 2012-10-23T21:42:47.290 に答える