최근에 응용 프로그램 클래스를 싱글 톤으로 사용하도록 확장하는 것은 나쁜 습관 이었지만 아무런 설명이 없었습니다.
그래서이 클래스의 사용에있어 잠재적 인 문제점은 무엇입니까? 많은 프로젝트에서 사용되는 것을 보았습니다.응용 프로그램 클래스 확장 및 우수 사례
또한 응용 프로그램 클래스를 사용하는 것이 좋지 않다면 응용 프로그램 수준 변수를 저장하는 대안은 무엇입니까?
최근에 응용 프로그램 클래스를 싱글 톤으로 사용하도록 확장하는 것은 나쁜 습관 이었지만 아무런 설명이 없었습니다.
그래서이 클래스의 사용에있어 잠재적 인 문제점은 무엇입니까? 많은 프로젝트에서 사용되는 것을 보았습니다.응용 프로그램 클래스 확장 및 우수 사례
또한 응용 프로그램 클래스를 사용하는 것이 좋지 않다면 응용 프로그램 수준 변수를 저장하는 대안은 무엇입니까?
Application
클래스를 확장 할뿐만 아니라 Singleton 클래스를 사용할 때의 문제는 응용 프로그램 프로세스가 죽을 경우 (응용 프로그램이 백그라운드에서 너무 길게 남아있을 가능성이 높을 때) 개체가 모두 손실 될 수 있다는 것입니다 귀하의 데이터.
그러나 앱을 포 그라운드로 사용하거나 백그라운드에서 많이 머 무르지 않는 경우 (100 % 위험이 없음) Application
클래스를 사용하는 것이 좋습니다.
대신 데이터를 SharedPreferences
에 저장할 수도 있고, 개체가 더 복잡한 경우 database
에 저장할 수도 있습니다.
또 다른 옵션은 예를 들어 Application
에 SharedPreferences
을 더한 것입니다. 먼저 변수가 null 인 경우 Application
인스턴스에서 변수를 검색하고 SharedPreferences
에서 검색하십시오.
싱글 톤 방식을 사용하는 것은 좋지 않은 생각이지만 한 스레드가 값을 변수에 설정하고 다른 스레드가 해당 값을 덮어 쓸 수있는 다중 스레드 환경에서 사용되는 경우 문제가 될 수 있습니다 값을 통지하지 않고.
그러나, 응용 프로그램 수준의 인스턴스를 유지하기 위해/변수,Application
클래스를 확장하고, 디폴트로 의 AndroidManifest.xml에 정의 에 제안 . 응용 프로그램을 시작할 때 응용 프로그램의 컨텍스트는 으로 한 번만 (응용 프로그램이 실행되고 메모리에 남아있을 때까지) 만들어 지므로 해당 클래스 내부의 일부 변수를 정의하여 공용 메서드를 사용하여 응용 프로그램 코드의 어느 곳에서나 사용할 수있게 만들 수 있습니다.
또한 응용 프로그램 클래스를 싱글 톤으로 사용할 수도 있습니다. 응용 프로그램 클래스는 실행될 때 한 번만 생성되므로 보장 할 수 있습니다.
싱글 톤 접근법을 사용하여 저에게는 큰 도움이되었습니다. 그러나 말했듯이 멀티 스레드 환경에서는주의해야합니다. –
답변 해 주셔서 감사합니다. 나는 하이브리드 접근법에 대해 갈 것이라고 생각한다. 나는 피할 수있을 때 디스크에서 데이터를 읽는 큰 팬이 아닙니다. – Teovald