2012-06-01 2 views
0

나는 단지 여러분이 안드로이드 개발과 관련하여 차이점 (사용법, 효율성 또는 우수 사례 측면에서)을 생각할 수 있는지보고 싶습니다.정적 변수 대 애플리케이션 변수

내 액티비티를위한 단일 애플리케이션 클래스 인 비 정적 변수를 사용하는 것과는 달리 기본 액티비티 중 하나에서 정적 변수를 사용하므로 (단일 인스턴스와 모든 곳에 액세스 할 수 있음)).

전역 변수를 사용하려고하면 두 가지 모두 동일한 최종 결과를 얻을 수 있습니다.

정적 인 응용 프로그램 서브 클래스를 사용하기 위해 이동했습니다. ("내가 뭘 사용하고 있는지 궁금해 할 때를 대비해서 배경 음악을 재생하고 싶었고 어디에서나 제어 할 수 있었고 특정 이유로 서비스를 이용하기를 원함).

가장 좋은 방법을 명확히하는 데 도움이되는 어떤 도움이 필요합니까? 당신이 당신의 매니페스트 파일에 다른 사용자의 Activity 또는 아무것도에서 어떤 이유로

android:process 

을 사용하는 정적 값이 초기화되고 당신은 할당 된 초기 값을 얻을 것이다 경우

+0

나는 당신이 http://stackoverflow.com/questions/2475978/using-static-variables-in-android를 읽고 싶을 것 같아. 내 의견으로는 당신의 질문에 대답한다.하나의 정적 변수를 사용하는 경우에는 싱글 톤 클래스보다 오버 헤드가 적지 만 더 큰 범위에서 실제 변수는 없으며 정적 변수가 존재하기 때문에 사용하지 않는 것이 좋지 않습니다. – Ewald

+0

고마워요.하지만 정적인지 아닌지에 대한 대답입니다. 내 질문은 정적 또는 응용 프로그램 하위 클래스를 사용할지 여부와 둘 다 메모리에 보존되므로 차이점은 무엇입니까? – Snake

답변

3

그것은 가정, 또한 사용에 따라 달라집니다 정적 변수. 이 경우 SharedPreference 또는 Application 클래스를 사용할 수 있습니다.

특정 활동에 android:process을 사용하면 해당 활동이 다른 프로세스에서 실행되고 Android에서 모든 애플리케이션이 자체 프로세스에서 실행된다는 것을 알고 있기 때문에.

이 외에도 정적을 사용하는 데 많은 문제가 있음을 알 수 없습니다. 하지만, 개인적으로 안드로이드는 글로벌 변수를 가지고 있기 때문에 개인적으로 Application 클래스를 선호합니다.

+0

[라이프 사이클] (http://www.javaying.com/2007/01/whats-lifetime-of- variables.html)은 프로그램의 수명주기를 통해 이루어 지므로 정적 값은 결코 재설정되지 않습니다. – Lucifer

+1

@Lucifer Android는'android : process'를 사용할 때 별도의 프로세스를 생성하므로 별도로 처리되므로 값이 재설정됩니다. –

+0

Dlavik Virtual Machine이 각 응용 프로그램에 대해 프로세스를 구분하는 것에 동의합니다. 하지만 통계적으로 이름을 짓는 것처럼 정적이 프로그래밍 언어에서의 동작을 변경한다고는 생각하지 않습니다. 이 문서 링크가 있습니까? – Lucifer

1

프로그램 실행 중에 각 변수에는 액세스 할 수있는 자체 시간이 있습니다. 이를 변수의 수명이라고합니다.

  • 인스턴스 변수 : 인스턴스 변수는 클래스 멤버입니다. 클래스에서 객체를 만들 때마다이 객체에 대한 새로운 인스턴스 변수 복사본이 만들어집니다. 사실, 클래스에서 객체를 생성한다는 것은 부분적으로는 그 객체에 대한 인스턴스 변수의 사본을 만드는 것을 의미합니다. 따라서 각 객체에는 자신이 속한 객체가 존재하는 한 인스턴스 변수의 사본이 있습니다. 이 변수의 값은 우리가 호출하는 것, 즉 객체의 상태를 구성합니다.

  • 정적 변수 : 정적 변수는 클래스의 구성원하지만 클래스에서 생성 된 객체에 속할 수 없습니다. 따라서 클래스에서 생성 된 객체는 정적 변수의 자체 복사본을 얻지 못합니다. 따라서 정적 변수는 클래스가 런타임에로드 될 때만 만들어집니다. 정적 변수의 존재는 클래스 자체에만 의존합니다. 결과적으로 클래스가 존재하는 한 정적 변수가 존재합니다. 이 두 변수 사이의 주요 차이점의

하나는 System.gc();를 호출 할 때 인스턴스 변수가 static variable will never set to null by calling gc 동안 널 (null)로 설정되어 있다는 점이다.

+0

귀하의 정보는 친애하는 루시퍼 더 유용합니다. 대화방에 입장 할 수있는 권한을 부여하면 대화방에서 더 자세한 정보를 알 수 있습니까? –