LayoutInflater 효율 분석 및 소스 코드 추적
효율 분석
테스트 장치
테스트 설정: 매혹 적 인 MX4 운영 체제: Android 5.1 운영 체제 CPU 모델: 연발 과 MT 6595 메모리: 2GB
테스트 방법
Layout Inflater 를 사용 하여 3 조 의 서로 다른 복잡 도의 xml 구 조 를 분석 하고 매번 100 번 을 분석 하 며 10 번 을 테스트 하여 100 번 의 평균 운행 시간 을 구한다.단 위 는 ms 이다.
테스트 결과
| | Xml |Time(ms/100)|
|---------------|-----------------------|------------|
| ( ) | 2 4 30 | 245ms |
| | 3 5 36 | 378ms |
| ( ) | 4 19 141 | 1283ms |
| 5 24 148 | 1156ms |
| ( ) | 4 37 251 | 2503ms |
| | 4 40 306 | 3272ms |
주: 깊이 는 xml 의 내장 층 차 를 말 합 니 다. 노드 수 는 xml 에서 View 의 개 수 를 말 합 니 다. 속성 개 수 는 모든 View 의 속성 총 수 를 말 합 니 다.
결론: 데이터 시트 에서 알 수 있 듯 이 100 회 분석 에 필요 한 평균 시간 은 xml 의 속성 갯 수 와 정비례 관 계 를 가진다.또한 매우 복잡 한 구조 로 해석 시간 도 30ms 정도 로 조절 할 수 있다.
2. LayoutInflater 소스 코드 추적
머리말
1. 컴 파일 기간
컴 파일 기간 에 aapt 도 구 는 xml 레이아웃 파일 을 미리 처리 합 니 다 (pre - processing). aapt 소스 코드 를 보면 XMLNode 류 는 자원 을 ResXMLtree 대상 으로 만 들 고 직렬 화 합 니 다.최종 적 으로 바 이 너 리 xml 파일 을 생 성하 여 xml 에 대한 압축 을 실현 합 니 다.포장 과정 에서 xml 등 자원 파일 에 resource. ap 이 존재 합 니 다.서류 중.
2. 실행 시 해석
해석 효율 을 높이 기 위해 서 실행 할 때 inflate 는 컴 파일 기 aapt 의 xml 에 대한 예비 처리 에 심각하게 의존 합 니 다.바 텀 은 먼저 C + + 로 ResXMLparser 류 를 실현 하여 apk 에 저 장 된 ResXMLtree 를 분석 합 니 다.그리고 XmlBlock 대상 을 자바 로 봉 하여 JNI 방법 으로 ResXMLparser 를 호출 합 니 다.XmlBlock. Parser 클래스 는 XmlResourceParser 인터페이스의 실현 입 니 다.XmlResourceParser 인 터 페 이 스 는 XmlPullParser 인터페이스 와 AttributeSet 인 터 페 이 스 를 계승 합 니 다.그 중에서 XmlPullParser 는 xml pull 방식 으로 xml 를 분석 하 는 표준 인터페이스 입 니 다.AttributeSet 은 자원 에 접근 하 는 패 키 징 인터페이스 입 니 다.LayoutInflater 는 컨 텍스트 에 따라 얻 은 XmlBlock. Parser 대상 을 사용 하여 layot 의 설명 을 가 져 오고 View 대상 을 생 성하 여 하위 View 를 부모 View 에 붙 입 니 다.
소스 코드 분석
inflate 방법
우선 첫 번 째 핵심 방법 인 inflate 관심 사 를 살 펴 보 자.
1. attachToRoot 매개 변수
이것 은 일반적으로 모두 가 주목 합 니 다. false 일 때 xml 의 rootView 는 그 속성 이 유 지 됩 니 다.다음 코드 부분 을 보십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA- 소스 코드 분할(Package 사용)▪️test45.java 소스 코드 ▪️test47.java 소스 코드 ▪️실행 결과 더하면 12, 당기면 8 ▪️예① 클래스 이름에 대한 완전한 입력 생략 import 문 사용 ▪️예① test45.java 소스 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.