보다 일반적인 문제는 여러 활동과 응용 프로그램의 모든 부분에서 상태를 저장하는 방법입니다. 정적 변수 (예 : 싱글 톤)는이를 달성하는 일반적인 자바 방법입니다. 그러나 안드로이드에서보다 우아한 방법은 여러분의 상태를 응용 프로그램 컨텍스트와 연관시키는 것입니다. 아시다시피, 각 활동은 가장 넓은 의미에서 실행 환경에 대한 정보 인 컨텍스트이기도합니다. 또한 응용 프로그램에는 컨텍스트가 있으며, Android는 응용 프로그램 전체에 단일 인스턴스로 존재 함을 보장합니다. 이를 수행하는 방법은 android.app.Application
이라는 자체 하위 클래스를 만든 다음 매니페스트의 응용 프로그램 태그에 해당 클래스를 지정하는 것입니다. 이제 Android는 자동으로 해당 클래스의 인스턴스를 만들고 전체 애플리케이션에서 사용할 수 있도록합니다. 당신은 Context.getApplicationContext()
방법 (활동도 동일한 효과가있는 방법 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();
...
}
}
이 본질적으로 정적 변수 또는 싱글을 사용하는 것과 같은 효과가 있습니다,하지만 확실히 통합 기존 안드로이드 프레임 워크에 잘 들어 맞습니다. 이 방법은 여러 프로세스에서 작동하지 않습니다 (응용 프로그램이 여러 프로세스가있는 유일한 응용 프로그램 중 하나 여야 함).
출처
2014-02-08 02:28:15
wmj
도움 주셔서 감사합니다. 왜 나는 단순히 상수 클래스를 생성하고 그 안에 변수를 넣을 수 없으며 정적으로 만들 수 있습니까? 그것은 응용 프로그램을 다시 열 때 클래스가 null 포인터가 보인다. 감사 – user782104