2011-12-28 4 views
4

Android 탭 호스트 응용 프로그램에서 응용 프로그램을 확장하는 클래스가 있습니다. App 클래스에서 필자는 모든 클래스에서 다시 작성해야 할 메소드와 변수를 배치했습니다. 한 가지 방법은 DB에서 읽고 결과를 ArrayList (이름, 성 등)에 저장합니다. 이 데이터베이스를 다시 읽고 정보가 필요한 모든 탭보기에 대한 코드를 다시 작성하는 대신 Application (myAppClass)을 확장하는 클래스에 메서드와 ArrayList를 꽂았습니다. 이 방법으로 onCreate()의 탭보기에서 mAC = (myAppClass) getApplicationContext()을 설정하면 myAppClass에서 모든 get ..() 및 set ..() 메소드를 참조 할 수 있습니다.정적 메소드와 클래스 확장 android.app.Application?

내 원래 계획은 정적 메서드와 변수가있는 공유 클래스를 사용하는 것이지만 "do not do that"스레드를 많이 읽었 기 때문에 응용 프로그램 경로로 이동하기로 결정했습니다. 이제는 프로젝트 라이브러리에서 myAppClass를 사용하려고하지만 오류가 발생하는 상황이 발생했습니다 android.app.Application cannot be cast to... myAppClass를 정적 메서드/변수로 다시 변경하고 응용 프로그램을 확장하지 않으면 작동하지만이 경우 큰 노 - 노. 이것을 할 또 다른 방법이 있습니까? 안드로이드가 참조로 모든 것을 전달한다면 확실하지는 않지만 메소드/클래스간에 거대한 (수천 개의 객체/멤버) ArrayList를 앞뒤로 지나쳐서 전체 애플리케이션을 다시 구현하는 것이 더 낫지 않습니까?

+0

Application 인스턴스가 하나뿐입니다. getter 및 setter를 사용할 필요가 없습니다. 서브 클래 싱 된 응용 프로그램에서 정적 메서드/변수를 사용하고 그런 식으로 사용합니다 : MyApplication.myMethod() ... –

답변

6

원래 독창적 인 계획은 정적 메서드와 변수가있는 공유 클래스를 사용하는 것이지만 "do not do that"스레드를 많이 읽었 기 때문에 응용 프로그램 경로로 이동하기로 결정했습니다.

"do not do"는 일반적으로 전역 범위의 항목에 대한 권장 사항이므로 정적 데이터 멤버는 물론 사용자 지정 Application을 포함합니다. 두 가지 모두 메모리 누수의 원인 일 수 있습니다.

는 지금, 나는 ...

내가 android.app.Application가에 캐스트 할 수없는 대한 프로젝트 라이브러리하지만 점점 오류 myAppClass를 사용하기 위해 노력하고있어 상황으로 실행했습니다 귀하 호스팅 프로젝트에서 매니페스트는 아마도 라이브러리의 Application 구현을 사용한다고 명시하지 않습니다.

이는 있어야하지 않습니다 큰 아뇨

은 다시 정적 데이터 멤버가 정의 Application보다 더 나쁜 없으며, 많은 경우에 더 낫다.

다른 방법이 있습니까?

Application 또는 정적 데이터 멤버를 사용하지 마십시오.

거대한 (수천 개의 개체/구성원) ArrayLists를 메서드/클래스간에 앞뒤로 전달하여 전체 응용 프로그램을 다시 구현하는 것이 더 좋을까요?

데이터베이스와 같은 영구 데이터 모델을 사용하는 것이 좋습니다. 정적 데이터 멤버를 영구 데이터 모델의 캐시로 사용하는 것은 메모리 관리에 매우주의하는 한 괜찮습니다.

+0

답장을 보내 주셔서 감사합니다. 당신은 안드로이드 매니페스트로 그것을 못 박았습니다. 객체의 정적 ArrayList를 사용하여 메모리를 관리 할 때 다르게 수행해야하는 작업은 무엇입니까? 응용 프로그램이 끝나면 안드로이드 청소를하지 않습니까? – wufoo

+0

@wufoo : "응용 프로그램이 끝날 때 Android 정리를하지 않습니까?" - 프로세스가 결국 종료 될 때 메모리가 정리되는 동안 메모리 누수가 발생해도 응용 프로그램이 힙 공간이 부족하여 충돌을 일으킬 수 있습니다. – CommonsWare

+1

감사합니다. 이클립스 메모리 분석기는 유출을 찾기위한 좋은 도구입니까? 여기에 2yr 이전 스레드가 : http://stackoverflow.com/questions/1147172/what-android-tools-and-methods-work-best-to-find-memory-resource-leaks – wufoo

관련 문제