2012-06-14 2 views
1

내 응용 프로그램에서 다른 클래스 파일이 있습니다. 나는 2 개가 활동이고 5 개가 활동을하는 5 개의 과목을 가지고 있습니다. 나머지 2 개는 클래스입니다. 이 두 클래스에서 변수의 수명은 얼마입니까? 나는 활동이 OS에 의해 죽을 수 있으므로, 활동이 죽을 때 서비스의 활동 변수를 사용할 수 없다는 것을 알고있다. 액티비티도 서비스도 아닌 애플리케이션의 수명 동안 다른 두 클래스 파일의 변수를 사용할 수 있습니까?안드로이드 기본 사항 - 다른 클래스 파일

답변

0
The other 2 are just classes. What is the lifetime of the variables in these 2 classes. 

는 변수가 정적 경우

변수 인스턴스의 정적 여부에 따라 달라집니다 : 클래스 주먹 시간을로드 할 때 롤 드릴 것입니다.

경우 예 : 그것은 당신이 CLAAS의 인스턴스를 생성 위치에 따라 달라집니다 및 활동이 활동의 ​​변수도 지워지지 있음을 살해 될 때 인스턴스의 범위는

so i wont be able to use the variables of the activities in the service when the activity is killed. 

예 것입니다.

Can I use the variables in the other 2 class files anytime during the lifetime of the application, which are neither activities nor services? 

당신은 클래스만큼 다른 클래스 또는 활동이나 서비스로의 참조가 유지됩니다

1- make them static 

    2- or if they are not static declare them in application file of you project. 
+0

제가 다른 2 종류의 변수의 유효 기간을 설정할 수있다. 기본적으로 나는 서비스에서 몇 가지 변수를 사용하고 싶다. 지금은 활동에서 사용하고 있으므로 활동이 더 이상 존재하지 않으면 서비스가 중단됩니다. 그렇다면 다른 2 개의 클래스에서 변수를 만들어서 서비스에서 항상 사용할 수 있도록해야합니까? 정적 변수입니다. – Zer0

+0

고마워요!내가 OS를 죽일 때라도 서비스에 이러한 변수를 사용할 수 있어야한다고 생각합니다. – Zer0

+0

대답의 맨 아래에 두 가지 옵션이 있습니다 ..... –

0

하여 응용 프로그램의 수명을 사용할 수 있습니다. 활동에 클래스에 대한 참조가있는 경우 활동이 파괴되면 클래스가 사라집니다. 서비스와 동일합니다. 불행하게도 POJO에 대한 참조 ("정상적인 클래스"당신이 그것을 전화로) 하나의 액티비티에서 다른 액티비티를 전달하는 안드로이드 방법이 없습니다, 그래서 당신은 쉽게 살아 클래스를 유지할 수 없습니다.

나는 RoboGuice를 사용하고 pojo의 Injectable Roboguice 클래스를 사용하여 활동 및 서비스에서 동일한 객체를 참조 할 수 있으며, 싱글 톤 인 경우 앱이 실행되는 동안 계속 살아 있습니다. u는 활동이나 서비스를 만든 다음 정적 값 변경 등의 변수를 만들 경우

+0

"계속 참고하십시오"는 의미는 무엇입니까? 서비스를 통해 pojo 변수에 계속 액세스하면 그 클래스는 올바르게 종료되지 않습니다 .. – Zer0

+0

활동에 클래스가 들어있는 필드가 있다고 가정합니다. 당신의 수업이 A와 같고 당신의 활동은 A a = new A()입니다; 액티비티가이 referene을 a로 유지하는 한 객체 a가 유지됩니다. 활동이 파괴되면 필드 a도 파괴되고 해당 객체는 가비지 수집됩니다. 또는 개체가 목록에 있으면 목록이있는 한 개체가있는 것입니다. 서비스에있는 pojo에 대한 참조가있는 경우 pojo가 유지됩니다. 서비스가 pojo에 대한 참조를 활동으로 전달할 수있는 방식으로 보조 또는 서비스 호출을 설정할 수 있습니다. – Christine

+0

하지만 내가 말했듯이, RoboGuice를 사용하면 인생을 훨씬 쉽게 할 수 있습니다. – Christine

2

당신은 유지됩니다, 그 변수를 사용할 수 있습니다. 그렇지 않으면 u는 활동 또는 서비스 클래스에서 해당 클래스 변수의 오브젝트를 작성할 수 있습니다 (활동 또는 서비스마다 별도의 변수 인스턴스가 필요한 경우). 당신이 응용 프로그램의 수명 전반에 걸쳐 참조하려는 일부 개체가있는 경우

+0

예 저는 활동과 서비스 모두에 대해 1 개의 변수를 갖고 싶습니다. 너무 아프다. 따라서 서비스가이 변수를 변경하면 활동이 다시 가동되면이 변수를 읽을 수 있습니다 .. – Zer0

1

난 당신이 응용 프로그램 컨텍스트에 저장 추천 할 것입니다. 다음 방법 중 하나를 통해 응용 프로그램 컨텍스트에 대한 참조를 얻을 수 있습니다 :

Context#getApplicationContext()

사용자 정의 응용 프로그램 클래스를 정의 매니페스트에서 Activity#getApplication()

사용하려는 : 확인 this

그런 다음 응용 프로그램의 onCreate 메소드에서 원하는 객체를 만들고 다른 Android 구성 요소가 사용할 getter를 제공하십시오.

+0

감사합니다. 활동이나 서비스가 아닌 클래스에서 정적 변수를 사용하여이 방법을 사용하면 어떤 이점이 있습니까? – Zer0