我有一個IntentService更新擴展應用程序類中的全局變量。在我的幾個活動中,我需要知道變量何時更改。 我是否必須在我的所有活動中實施BroadcastReceiver(並從我的服務中發送意圖),還是有更簡單的方式通知我的活動?如何通知活動有關應用程序中全局變量的更改?
謝謝!
我有一個IntentService更新擴展應用程序類中的全局變量。在我的幾個活動中,我需要知道變量何時更改。 我是否必須在我的所有活動中實施BroadcastReceiver(並從我的服務中發送意圖),還是有更簡單的方式通知我的活動?如何通知活動有關應用程序中全局變量的更改?
謝謝!
是的,BroadcastReceivers就是爲此而設計的。這就是說,爲什麼不製作一個具有BroadcastReceiver和所有相關邏輯的父類?那麼你的其他活動唯一需要做的只是繼承該父類。
請注意,每次發送我們的廣播時,您還應該在永久性存儲中設置某種全局變量(如共享首選項)。這樣,如果發送廣播時您的某個活動不在前臺,則它可以在持久存儲中檢查該變量,並將其返回到onResume()
方法中,然後採取相應措施。
我也遇到過這種類型的問題。在解決方案的其中一個廣播接收器。但是我對此並不滿意。所以,我嘗試了另一種方法。您可以在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;
}
}
Interresting!這是我想要的......但這是線程安全嗎?如果我從其中線程是運行中活動的更新函數的IntensService(在另一個進程中運行)中設置值?忍耐與我我不是Java程序員。 :) – 2012-04-05 06:13:41
看到這個鏈接:http://rameshandroidworld.wordpress.com/2012/04/05/object-observer-pattern-in-android/ – 2012-04-05 06:45:21
更新鏈接http://andhradroid.wordpress.com/2012/04/ 05/object-observer-pattern-in-android/ – 2013-04-12 07:10:49
BroadCaste接收器是要走的路.. – ngesh 2012-04-05 05:13:08