2012-09-08 3 views
5

최근에 응용 프로그램 클래스를 싱글 톤으로 사용하도록 확장하는 것은 나쁜 습관 이었지만 아무런 설명이 없었습니다.
그래서이 클래스의 사용에있어 잠재적 인 문제점은 무엇입니까? 많은 프로젝트에서 사용되는 것을 보았습니다.응용 프로그램 클래스 확장 및 우수 사례

또한 응용 프로그램 클래스를 사용하는 것이 좋지 않다면 응용 프로그램 수준 변수를 저장하는 대안은 무엇입니까?

답변

2

Application 클래스를 확장 할뿐만 아니라 Singleton 클래스를 사용할 때의 문제는 응용 프로그램 프로세스가 죽을 경우 (응용 프로그램이 백그라운드에서 너무 길게 남아있을 가능성이 높을 때) 개체가 모두 손실 될 수 있다는 것입니다 귀하의 데이터.

그러나 앱을 포 그라운드로 사용하거나 백그라운드에서 많이 머 무르지 않는 경우 (100 % 위험이 없음) Application 클래스를 사용하는 것이 좋습니다.

대신 데이터를 SharedPreferences에 저장할 수도 있고, 개체가 더 복잡한 경우 database에 저장할 수도 있습니다.

또 다른 옵션은 예를 들어 ApplicationSharedPreferences을 더한 것입니다. 먼저 변수가 null 인 경우 Application 인스턴스에서 변수를 검색하고 SharedPreferences에서 검색하십시오.

+0

답변 해 주셔서 감사합니다. 나는 하이브리드 접근법에 대해 갈 것이라고 생각한다. 나는 피할 수있을 때 디스크에서 데이터를 읽는 큰 팬이 아닙니다. – Teovald

7

싱글 톤 방식을 사용하는 것은 좋지 않은 생각이지만 한 스레드가 값을 변수에 설정하고 다른 스레드가 해당 값을 덮어 쓸 수있는 다중 스레드 환경에서 사용되는 경우 문제가 될 수 있습니다 값을 통지하지 않고.

그러나, 응용 프로그램 수준의 인스턴스를 유지하기 위해/변수,Application 클래스를 확장하고, 디폴트로 의 AndroidManifest.xml에 정의 에 제안 . 응용 프로그램을 시작할 때 응용 프로그램의 컨텍스트는 으로 한 번만 (응용 프로그램이 실행되고 메모리에 남아있을 때까지) 만들어 지므로 해당 클래스 내부의 일부 변수를 정의하여 공용 메서드를 사용하여 응용 프로그램 코드의 어느 곳에서나 사용할 수있게 만들 수 있습니다.

또한 응용 프로그램 클래스를 싱글 톤으로 사용할 수도 있습니다. 응용 프로그램 클래스는 실행될 때 한 번만 생성되므로 보장 할 수 있습니다.

+0

싱글 톤 접근법을 사용하여 저에게는 큰 도움이되었습니다. 그러나 말했듯이 멀티 스레드 환경에서는주의해야합니다. –