2011-07-27 4 views
0

現在実行中のブロードキャスト受信者をアクティビティから更新することは可能ですか?例えば、:現在実行中のBroadcastReceiver(新しい値を渡す)をアクティビティから更新します。

ユーザーが文字列を入力してからsubmitを押すと言う...私は放送受信機が新しい文字列で更新され、その文字列を受信機が持つかもしれない古い文字の代わりに使用したい。これは可能ですか?または、ユーザーが[送信]をクリックして新しい文字列で再起動したときに、古い受信者を何とか止めることはできますか?

答えて

0

あなたの質問に間違いがありますが、SharedPreferenceにあなたの文字列を保存しないのはなぜですか?

アクティビティでその文字列を更新する必要がある場合は、その文字列を環境設定として保存し、ブロードキャストレシーバのonReceiveメソッドで優先度から戻します。

+0

共有リストはArrayList ですか? –

+0

いいえ、セットにすることはできません。 getStringSetメソッドを参照してください。違いは、重複した文字列を得ることができないということです(リストでは重複を許しています) – ccheneson

+0

は3.0のためにしか機能しません –

0

私はあなたができるとは思わない。 Receiver Lifecycleのドキュメントを見ると、ライフサイクルがonReceiveに限定されていることがわかります。

受信者のライフサイクルがユーザーとやりとりするのに十分な長さの場合は、単にBroadcastReceiverを使用してサービスを開始します。サービスには2つのことを行うことができます:

    は、活動中のユーザーによって更新された文字列への更新のためのIntentFilterと(異なる)BroadcastRecevierを(登録あなたの長時間実行されるタスク
  1. を実行するために、バックグラウンドスレッドを開始
  2. )。サービスがインテントを受け取ると、文字列値が更新されます。サービスとバックグラウンドスレッドとの同期が必要であることに注意してください(興味のある読者の練習として残しておきます)。

次に、ユーザが問題の値を変更するたびに、アクティビティコードがインテントを発するようにします。

このソリューションの素晴らしい点は、サービスが実行されておらず、インテントが床に落とされ、サービスをまったく開始する必要がない場合です。サービスが実行されている場合、更新が行われます。

関連する問題