2012-03-31 10 views
0

私はインターネット状態の変化を受信するブロードキャスト受信機を持っています。android BroadCastReceiverリスナーにメッセージを送信する方法


私は、この受信機ではリスナーのリストを持っているし、それらの一つ一つに、インターネットの状態を更新することができるようにしたい...

たびに受信機がで呼び出された私の問題システムでは、クラスの新しいインスタンスを作成し、作成したレシーバーのリストを参照することはできません。

これを解決するにはどうすればよいですか?

+0

[this](http://stackoverflow.com/a/9443063/802469)のようなものが役立つ可能性があります。 – Jakar

+0

[リスナーのアンドロイドリンクリスト]の複製が可能です。(http://stackoverflow.com/questions/9959366/android-linked-list-of-listeners) – CommonsWare

答えて

1

プッシュ通知システムを試してください。また、ユーザーのリストをUrbanAirShipでも試してみてください。

+0

私は実際に他のアイデアを考えました。静的として?それは動作しますが、それは良い解決策ですか? –

+0

静的に動作するように見えるかもしれませんが、アプリ全体をいつでもメモリから取り出せます。それが起こると、あなたは正方形に戻ります。どのように、いつ取り出されるかは、特定のデバイスとユーザーが何をしているかによって異なります。 –

+0

私がしたいことは、私の活動でインターネットの状態を変更することだけです。インターネットがオンになっているときは、「オン」でオフイベントでも同じです。私は作ったとイベントの実装のインターフェイスとどのように動作するはずです.. –

1

受信者はステートレスであることを意図しています。 onReceive()が返された後に受信者オブジェクト自体が破壊されたと仮定する必要があります。メモリのために、アンドロイドはあなたのアプリを永遠にメモリに置いておくことはありません。

あなたがしようとしていることはできません。受信者の上に観測可能なパターンを実装しようとしていますが、発見した場合を除き、受信者の呼び出しの間に観測者のセットを追跡することはできません。

アプリケーションのより大きなコンテキストを知らなくても解決する方法を説明するのは難しいです。オブザーバがすべてステートレスなオブジェクトである場合は、オブザーバのタイプをプリファレンスに格納し、必要に応じてファクトリを使用して再インスタンス化することができます。例えば、onReceive()で、

String[] listeners = mPrefs.getString("listeners").split("|"); 
for (String l : listeners) { 
    MyListener listener = ListenerFactory.obtain(l); 
    listener.onWhatever(...); 
} 

か、あなたのボートを浮かぶものは何でもSQLiteのデータベースを、使用することができます。

もう一つのアイデアは、リスナーをBLOBとしてsqlite dbに登録してシリアル化し、受信者で逆シリアル化してDBに再シリアル化することです。

関連する問題