2012-04-05 4 views
3

私は、拡張アプリケーションクラス内のグローバル変数を更新するIntentServiceを持っています。いくつかの鉱山活動では、変数がいつ変更されるのかを知る必要があります。 すべてのアクティビティにBroadcastReceiverを実装する必要がありますか(私のサービスからインテントを送信する)か、アクティビティを通知する簡単な方法がありますか?アプリケーションのグローバル変数の変更についてアクティビティに通知するにはどうすればよいですか?

ありがとうございました!

+0

ブロードキャストレシーバーは、行く方法です。 – ngesh

答えて

5

はい、BroadcastReceiversはこのために設計されています。つまり、BroadcastReceiverとすべての関連ロジックを持つ単一の親クラスを作成するだけではないのですか?次に、あなたの他のアクティビティが唯一しなければならないことは、その親クラスから継承することだけです。

ブロードキャストを送信するたびに、(共有プリファレンスのような)永続ストレージに何らかのグローバル変数を設定する必要があることに注意してください。そうすれば、ブロードキャストが送信されたときにあなたの活動の1つがフォアグラウンドにない場合、それはonResume()メソッドに戻ったときに永続ストレージ内の変数をチェックし、それに従って行動することができます。

7

私もこの種の問題に直面しています。ソリューションの1つに放送受信機。しかし、私はそれに満足していません。だから、私は別のmetodで試しました。オブジェクトオブザーバのパターンで、andrdoidの詳細を見つけることができます。refer this link

public class TestActivity extends Activity implements Observer { 
     BaseApp myBase; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      myBase = (BaseApp) getApplication(); 
      myBase.getObserver().addObserver(this); 
      myBase.getObserver().setValue(10); 

     } 

     @Override 
     public void update(Observable observable, Object data) { 
      // This method is notified after data changes. 

      Toast.makeText(this, "I am notified" + myBase.getObserver().getValue(), 
        0).show(); 
     } 
    } 



    public class Test extends Observable 
    { 

     private int value=2; 

     /** 
     * @return the value 
     */ 
     public int getValue() 
     { 
      return value; 
     } 

     /** 
     * @param value 
     *   the value to set 
     */ 
     public void setValue(int value) 
     { 
      this.value = value; 
      setChanged(); 
      notifyObservers(); 
     } 
    } 

    package app.tabsample; 

    import android.app.Application; 

    public class BaseApp extends Application { 
     Test mTest; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      mTest = new Test(); 
     } 

     public Test getObserver() { 
      return mTest; 
     } 

    } 
+0

Interresting!これは私が何をthougt .....しかし、このスレッドセーフですか? IntensService(別のプロセスで実行されている)の値を、スレッドがアクティビティの更新機能である値に設定している場合は、私と一緒にいてください私はJavaprogrammerではありません。 :) –

+0

このリンクを参照してください:http://rameshandroidworld.wordpress.com/2012/04/05/object-observer-pattern-in-android/ –

+0

更新されたリンクhttp://andhradroid.wordpress.com/2012/04/ 05/object-observer-pattern-in-android/ –

関連する問題