2012-05-14 6 views
1

시작 활동 (예 : Activity 1의 Book 클래스) 에 변수를 만들 수 있으며 응용 프로그램의 어느 곳에서나 사용할 수 있습니까 (예 : 활동 3의 Book 클래스). , 4 & 5) 실제로 통과하지 않고.응용 프로그램의 아무 곳에서나 변수 액세스 (안드로이드)

my xml 처리기가 일련의 개체를 만들기 때문에 개체를 변경 한 후에도 xml 파일을 업데이트하므로 요청하는 중입니다.

답변

4

정적 변수를 만들 수 있습니다. 적절한 액세스 (예 : public)로 신고 된 경우 동일한 프로세스의 모든 활동에서 바로 사용할 수 있습니다. (이것은 기본값이 될 것이므로 별도의 프로세스로 작업을하려면 추가 작업이 필요합니다.)

그런 전역 변수를 별도의 클래스로 구분하는 것이 일반적입니다.

그러나 앱을 백그라운드로 푸시하면 프로세스가 종료되어 다시 생성 될 수 있습니다. 이 경우 정적 변수에 저장된 모든 데이터가 손실됩니다. 대안으로는 SharedPreferences, 데이터베이스 또는 ContentProvider 사용이 있습니다.

+0

그래서 모든 활동간에 수업을 사용할 수있는 쉬운 방법이 없다는 말입니까? – Raigex

+0

@Raigex - 반대로 말한 것 같습니다. 공유 변수를 보유 할 클래스를 선언하십시오. 그것을 싱글 톤 클래스로 만들거나 다른 모든 공유 변수를 정적으로 만들 수 있습니다. 프로세스를 중단 한 상태에서 데이터를 보호해야하는 경우 (응용 프로그램 재시작시 데이터를 다시 작성하는 것과는 대조적으로) 조금 더 신중해야합니다. –

+0

고맙습니다. 그 일을하는 자습서를 알고 있습니까? 데이터가 파손되지 않도록 보호하는 부분을 의미합니다. – Raigex

1

응용 프로그램을 확장하는 GlobalVariables라는 이름으로 클래스를 구현합니다. 당신의 AndroidManifest.xml에서

public class GlobalVariables extends Application 

응용 프로그램 태그에서이 작업을 수행 :

<application android:label="@string/YourAppName" android:icon="@drawable/YourIcon" 
       android:name=".activities.GlobalVariables."> 

안되는 (당신이 파일을 명시하는 활동을 추가 할 유사) 클래스를 선언하는 패키지 경로를 잊어 버려.

그런 다음 애플리케이션의 모든 곳에서이 클래스와 변수 또는 메소드에 액세스 할 수 있습니다.

GlobalVariables globalVariables = (GlobalVariables) getApplicationContext(); 

응용 프로그램에서 확장 클래스가 (예를 들어, 여기에 우리의 GlobalVariables가) 앱 시작으로 생성되고 응용 프로그램이 파괴 될 때까지 사용할 수 있습니다 : 어떤 활동의에서 onCreate 방법으로이 작업을 수행합니다.

원하는 변수를 저장할 수있는 HashMap 또는 기타 항목을 GlobalVariables 클래스에 포함 할 수 있습니다. 첫 번째 Activity의 변수를 GlovalVariables로 밀어 넣고 두 번째 물마루에서 GlobalVariables로 인스턴스를 가져옵니다. 이와 같이 (다시 한번) :

GlobalVariables globalVariables = (GlobalVariables) getApplicationContext(); 
+1

문제는 응용 프로그램이 백그라운드에있을 때 운영 체제가'Application' 객체 (그리고 전체 프로세스)를 파괴 할 수 있다는 것입니다. Extending'Application'은 단순한 싱글 톤이나 정적 클래스와 비교하여 더 이상 이것에 대한 보호를 제공하지 않는다. –

관련 문제