Android 메모리 가이드의 '종속성 주입 프레임 워크 방지'가 Dagger에도 적용 되나요?
그래서 저는 메모리 성능에 관한 Android 기사에서이 모범 사례를 보았습니다.
http://developer.android.com/training/articles/memory.html
그들은 말했다
의존성 주입 프레임 워크 피하기
Guice 또는 RoboGuice와 같은 종속성 주입 프레임 워크를 사용하면 작성하는 코드를 단순화하고 테스트 및 기타 구성 변경에 유용한 적응 형 환경을 제공 할 수 있으므로 매력적일 수 있습니다. 그러나 이러한 프레임 워크는 코드에서 주석을 스캔하여 많은 프로세스 초기화를 수행하는 경향이 있으므로 필요하지 않더라도 상당한 양의 코드를 RAM에 매핑해야 할 수 있습니다. 이러한 매핑 된 페이지는 Android에서 삭제할 수 있도록 깨끗한 메모리에 할당되지만 페이지가 오랫동안 메모리에 남아있을 때까지 발생하지 않습니다.
그러나 그들이 빠르다고 주장하는 Dagger는 어떻 습니까 . 어느 것을 가야할지 잘 모르시겠습니까?
이 권장 사항은 모든 종속성 주입 프레임 워크에 동일하게 적용 되지 않습니다 .
..frameworks [Guice와 같이 작동]는 코드에서 주석 을 스캔하여 많은 프로세스 초기화를 수행하는 경향 이 있으며, 필요 하지 않더라도 상당한 양의 코드를 RAM에 매핑 해야 할 수 있습니다.
따라서 상기 [런타임] 주석을 스캔 하지 않는 DI / IoC 프레임 워크를 사용하는 경우 , 반사의 [과도한] 사용을 암시하면이 이유가 적용되지 않습니다. Dagger 는 주석을 사용 하지만 Guice 1 과 다르게 사용되며 명시된 문제를 방지합니다.
Dagger가 " 안드로이드 와 자바를 위한 빠른 의존성 주입기 "로 쓰여졌 기 때문에 , 저자들은 이것을 이러한 목적으로 설계했고 그것이 그러한 목표에 적합하다고 믿습니다. 계속해서 시도해보십시오.
1 Dagger는 런타임 주석과 리플렉션에 의존하는 대신 컴파일 시간 주석 ( 대부분 )을 사용합니다. 메모리 가이드가 경고 한 문제를 일으키는 것은 런타임 주석 스캔 및 반사입니다.
Android 팀은 최근 개발자에게 Dagger 2 사용 을 제안 하기 위해 권장 사항을 업데이트했습니다 .
이전 권장 사항은 높은 반영 비용을 기반으로했습니다. Dagger 2는 더 이상 리플렉션 (Dagger 1)을 사용하지 않기 때문에 "불필요한 런타임 비용이나 메모리 사용없이 Android 앱에서 사용할 수 있습니다" 라고 믿습니다 .
(면책 조항 : 저는 Dagger 2 팀 관리자입니다.)
Dagger의 창시자 인 @JakeWharton은 Butterknife 라는 간단한 뷰 "주입"프레임 워크도 작성했습니다.
다음과 같이 사용합니다.
class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } }
'Development Tip' 카테고리의 다른 글
Maven에서 종속성에 대한 저장소를 지정하는 방법 (0) | 2020.12.05 |
---|---|
node_modules 위치 변경 (0) | 2020.12.05 |
UITableView 유연 / 동적 heightForRowAtIndexPath (0) | 2020.12.05 |
바이너리 파일을 부호없는 문자 벡터로 읽는 방법 (0) | 2020.12.05 |
Haskell에 ML 스타일 모듈을 추가하는 데있어 가장 큰 이론적 어려움은 무엇입니까? (0) | 2020.12.05 |