@RomainGuy가 Avoiding memory leaks 문서를 읽은 후, 현재 사용중인 Android 애플리케이션이 애플리케이션의 주요 활동을 전달하는 실수를 저질렀다는 것을 깨달았습니다. 따라서 언제든지 해당 활동 매개 변수를 Activity.getApplicationContext()으로 간단하게 바꿀 수 있습니까?응용 프로그램의 활동 방법을 전달하는 명령 패턴?
그러나 내 응용 프로그램에는 여전히 응용 프로그램 주 활동의 멤버 일 수있는 메서드를 실행해야하는 특정 클래스가 있습니다.
따라서이 제한 사항을 해결하기 위해 아마도 Command Pattern을 사용하려고 생각했습니다.
문제는 우리가 예를 들어 보면, 그 :
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt(((MyActivity)data).getWindow());
}
}
나는 활동 주위 패스 (Object
데이터로 위장이 시간을) 필요의 막 다른 골목에 다시 실행하고 있습니다.
"chicken & 달걀"상황에서 어떻게 빠져 나옵니까?
이 문제에 접근하는 더 좋은 방법이 있습니까?
"해당 응용 프로그램의 주요 활동을 전달하는"것은 실수라고 주장하는 기사는 없습니다. 정적 인 데이터 멤버에 넣는 것은 실수 다. 그리고 기사의 맨 아래에있는 첫 번째와 세 번째 글 머리 기호의 핵심 문제이다. IMHO, 당신이 정확히 왜 그것을 사용하고 있는지 정확히 알 때'Application' 만 사용하십시오. 특히 UI 작업의 경우 '활동'에 대한 담요 대체물이 아닙니다. – CommonsWare
@CommonsWare이 중요한 차이점을 지적 해 주셔서 감사합니다. 제 경우에는 응용 프로그램의 다양한 모듈에 쉽게 액세스 할 수 있도록 정적 SharedPreferences 데이터 멤버를 기본 Activity에 유지합니다. 그래서 나는 MainActivity.staticPrefs'라는 매개 변수로 주요 Activity를 넘기는 것을 피함으로써 공유 환경 설정에 접근 할 수 있습니다. 이것은 "* 정적 데이터 멤버에 넣기 *"로 간주됩니까? – ih8ie8
좋은 질문입니다. 'SharedPreferences'는 인터페이스이기 때문에 구체적인 구현이 어디에 있는지 쉽게 알지 못합니다. 모르겠습니다. 'SharedPreferences'가'Context'에 붙어 있다면'Application'을 사용하거나 정적 데이터 멤버를 피할 필요가 있습니다. 나는'SharedPreferences'로'Application'이 잘 작동 할 것으로 기대합니다. – CommonsWare