2012-04-05 2 views
3

У меня есть IntentService, который обновляет глобальную переменную в расширенном классе Application. В нескольких моих действиях мне нужно знать, когда изменяется переменная. Должен ли я выполнять BroadcastReceiver во всех своих действиях (и отправлять намерение с моей службы) или есть более простой способ известить о моих действиях?Как уведомлять активность об изменениях глобальной переменной в приложении?

Спасибо!

+0

BroadCaste Receiver - это путь. – ngesh

ответ

5

Да, BroadcastReceivers были предназначены именно для этого. Тем не менее, почему бы не просто создать один родительский класс, который имеет BroadcastReceiver и всю связанную с ним логику? Тогда единственное, что нужно сделать другим, это просто наследовать от этого родительского класса.

Обратите внимание, что вы должны также установить какую-либо глобальную переменную в постоянном хранилище (например, разделяемое предпочтение) каждый раз, когда вы отправляете нашу трансляцию. Таким образом, если одно из ваших действий не находится на переднем плане при передаче широковещательной рассылки, оно может проверять переменную в постоянном хранилище, когда она возвращается в методе onResume() и действует соответствующим образом.

7

У меня также возникла такая проблема. Широковещательный приемник в одном из решений. Но я не удовлетворен этим. Итак, я попробовал с другим методом. Вы можете найти более подробную информацию в шаблоне наблюдателя объекта в 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! Это то, что я из ..... Но это потоки? Если я устанавливаю значение из IntensService (которое выполняется в другом процессе), в котором поток является функцией обновления в запущенном действии? Потерпи меня, я не джавапрограмм. :) –

+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/ –

Смежные вопросы