我有一个 IntentService 可以更新扩展应用程序类中的全局变量。在我的几个活动中,我需要知道变量何时更改。我是否必须在我的所有活动中实现广播接收器(并从我的服务发送意图),还是有更简单的方法来通知我的活动?
谢谢!
我有一个 IntentService 可以更新扩展应用程序类中的全局变量。在我的几个活动中,我需要知道变量何时更改。我是否必须在我的所有活动中实现广播接收器(并从我的服务发送意图),还是有更简单的方法来通知我的活动?
谢谢!
我也遇到过这类问题。解决方案之一中的广播接收器。但我对此并不满意。所以,我尝试了另一种方法。您可以在 Android 中的对象观察者模式中找到更多详细信息,请参阅此链接。
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;
}
}
是的,BroadcastReceivers 就是为此而设计的。也就是说,为什么不只创建一个具有 BroadcastReceiver 和所有相关逻辑的父类?然后,您的其他活动唯一要做的就是从该父类继承。
请注意,每次发送广播时,您还应该在持久存储中设置某种全局变量(如共享首选项)。这样,如果在发送广播时您的某个活动不在前台,它可以在该onResume()
方法返回时检查持久存储中的变量并采取相应措施。