全局状态
是你的朋友。:)
需要时检查全局字符串(比如在终止之前)。您可能还希望有一个枚举state
。或者一个标志来查看状态是否有效。
食谱:
您遇到的更普遍的问题是如何跨多个活动和应用程序的所有部分保存状态。静态变量(例如,单例)是实现此目的的常见 Java 方式。然而,我发现,在 Android 中一种更优雅的方式是将您的状态与应用程序上下文相关联。
如你所知,每个Activity也是一个Context,是最广义上关于其执行环境的信息。您的应用程序也有一个上下文,Android 保证它将作为单个实例存在于您的应用程序中。
这样做的方法是创建您自己的android.app.Application子类,然后在清单的应用程序标记中指定该类。现在 Android 将自动创建该类的一个实例,并使其可用于您的整个应用程序。您可以使用 Context.getApplicationContext() 方法从任何上下文访问它(Activity 还提供了一个具有完全相同效果的方法 getApplication()):
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class BlahBlah extends Service {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
这与使用静态变量或单例的效果基本相同,但可以很好地集成到现有的 Android 框架中。请注意,这不适用于跨进程(如果您的应用程序是少数具有多个进程的应用程序之一)。
学分去@Soonil