2012-03-01 4 views
0

저는 서버에 연결해야하는 응용 프로그램을 만들고 있습니다. 또한 다른 활동에서이 연결에 액세스해야합니다.
이것을 달성하기 위해 Application 클래스를 덮어 쓰고 거기에 연결을 만들려고했습니다. 이렇게하면 모든 활동에서 쉽게 상호 작용할 수 있으므로 내 연결 클래스에 액세스하려면 getApplicationContext().getConnection()으로 전화하면됩니다.응용 프로그램에서 리소스를 해제 하시겠습니까?

이 접근법의 문제점은 Application 클래스에 연결 및 관련 리소스를 해제 할 수있는 onDestroy() 메서드 또는 이와 유사한 메서드가 없기 때문입니다. onLowMemory()이 호출 될 때까지 유휴 상태로 두는 것이 최선의 방법이라고 생각하지 않습니다.
사용자 정의 release() 메서드를 호출 할시기를 알 수 없으므로 추가 할 수 없습니다. 마지막 두 가지 활성 상태가 활성 상태가 될 수 있으며 사용자 동작에 따라 다른 상태 인 경우 알 수 없습니다. 활성 상태가 종료되면 시작될 수 있음).

여기에 좋은 해결책이 있습니까? 그냥 리소스를 해제 (예 : onLowMemory())하기 전에 무시하거나 내가 원하는 것을 얻을 수있는 더 좋은 방법이 있습니다 (가능하면 Service). 기본 클래스에 대한 호출이 여러 번 있기 때문에 서비스에 지나치게 문제가있을 수 있습니다.)

답변

0

그냥 Singleton 디자인 패턴을 사용하십시오. Connection 클래스를 싱글 톤 (Singleton)으로 만들면 다양한 액티비티로의 접속에 접근 할 수 있으며 멀티 스레딩을 처리하는 것을 잊지 않아도됩니다.

+0

나는 싱글 톤을 사용하지 않기를 희망했다. 먼저 코드가 더 깨끗해지고 응용 프로그램 컨텍스트에서 연결에 대해 더 이해할 수 있다고 생각합니다. 둘째, 싱글 톤에서 리소스를 릴리스 할 때 여전히 문제가 있기 때문에 싱글 톤에는'onLowMemory ()'메소드를 호출합니다. 다중 스레드는 이미 다음을 고려하여 처리되었습니다. – Jave

+0

"활성 상태 인 마지막 활동 일 수있는 두 가지 활동이 있으며 활성 상태 일 때 다른 활동이 시작될 것인지 사용자 행동에 따라 알 수 없습니다"- 당신은 액티비티를 카운트하기위한 정적 카운터를 추가 할 수 있으며, 열린 액티비티 콜 릴리즈()가 단 하나만있는 경우. –

+0

그래, 그게 내가 염두에 두었던 것인데, 그것은 응용 프로그램이나 싱글 톤 방법 모두로 할 수있다. 응용 프로그램에서 참조 카운터와 같은 것을 고려하고 있었고 더 이상 활성 참조가 없으면 타이머를 시작하고 시간이 지나도 활성 참조가없는 경우 자원을 해제합니다. 이 질문은 싱글 톤 대 응용 프로그램에 대한 좋은 토론이 있습니다. http://stackoverflow.com/questions/3826905/singletons-vs-application-context-in-android – Jave

관련 문제