기술 실무자라면 어떻게 해야 할지 모르는 것이 아니라 어떻게 해야 할지 모르는 경우가 많죠? 오늘 편집자는 안드로이드 애플리케이션을 최적화하는 방법에 대한 몇 가지 경험을 모아 총 정리했습니다. 8차원.
1. 레이아웃 최적화
Android 시스템은 원활한 UI 렌더링을 위해 16ms마다 VSYNC 신호를 보냅니다. 즉, 대부분의 작업이 16ms 이내에 완료되어야 합니다.
위의 인터페이스가 너무 복잡하고 렌더링이 제 시간에 완료되지 않는 것 외에도 과도한 그리기 문제도 있습니다. 소위 오버 드로잉은 동일한 프레임에서 특정 픽셀이 여러 번 그려지는 것을 의미합니다. 다중 레벨 UI 인터페이스에서 보이지 않는 UI도 그려지는 경우 이러한 겹치는 영역의 픽셀이 여러 번 그려집니다. 따라서 많은 CPU 및 GPU 리소스가 낭비됩니다. 예를 들어 레이아웃에는 자체 배경이 있고 하위 뷰에는 자체 배경이 있는 경우에도 오버드로잉이 발생합니다. HierarchyViewer를 사용하여 활동의 레이아웃이 너무 복잡한지 확인하세요
개발자 옵션에서 프로필 GPU 렌더링을 선택하고 화면에서를 선택하세요 as bar
TraceView를 사용하여 CPU 실행을 관찰
커스텀 컴포넌트의 빈번한 트리거를 피하기 위해 커스텀 컴포넌트의 onDraw()에 문자열과 같은 임시 객체를 추가하세요. onDraw()에서 그려야 하는 영역을 그리려면 canvas.clipRect()를 사용하는 것을 고려해 보세요
ListView와 같은 구성 요소 컨테이너의 경우 ConvertView 사용을 고려하고, ViewHolder를 사용하고
자동 줄 바꿈을 달성하려면 ListView 대신 RecycleView를 사용하고 정적 레이아웃을 사용하는 것이 좋습니다
2. 메모리 최적화
왜?리소스는 항상 제한되어 있으며, 메모리도 리소스입니다. Android에서는 메모리 리소스를 과도하게/부적절하게 사용하면 애플리케이션이 자주 종료되며 이로 인해 궁극적으로 종료됩니다. 모든 개발자는 메모리 절약을 염두에 두어야 합니다.
메인 프로세스와 재생 프로세스로 나눌 수 있는 뮤직 플레이어 클래스 등 여러 프로세스를 합리적으로 사용하세요
비동기 큐 사용 시 경계 큐를 고려하세요
HashMap의 크기를 확실히 알 수 있다면, 초기화할 때 용량을 설정하세요
3. 전원 최적화
전원은 모바일 기기에 있어 매우 귀중한 리소스입니다. 조사에 따르면 일반적으로 인터페이스 렌더링과 같은 프로그램의 핵심 기능에 전력이 약 30%만 소비되고 나머지 70%는 보고 데이터, 위치 업데이트 및 백그라운드 알림에 소비되는 것으로 나타났습니다. .
전화 옵션에서 앱의 전력 소비 통계를 확인하세요
Battery Historian 도구를 사용하여 자세한 전력 소비를 확인하세요
깨우기 화면 횟수와 지속 시간을 줄이고 WakeLock을 올바르게 사용하세요.
로그 보고 등 불필요한 작업을 충전 상태로 지연할 때 야간 충전 중에 완료할 수 있습니다. JobScheduler 사용
센서 수집 사용 데이터가 더 이상 필요하지 않으면 등록을 취소해야 합니다.
네트워크 통신을 줄이고 통신을 병합합니다.
위치 확인 기능을 합리적으로 사용하고 위치 업데이트 빈도를 줄입니다. 실제 상황에 따라 다양한 정밀 포지셔닝 요구 사항을 사용하세요.
왜?4. 네트워크 최적화
감지하는 방법
탐지 방법
메소드 추적을 사용하세요trace.beginSection( ) 및 onCreate
의 Trace.endSection()
adb shell am start -W [packageName]/[packageName.MainActivity]
을 사용하여 콜드 스타트 시간 측정최적화 방법 #🎜 🎜#
왜?#🎜🎜 #
- Activity의 onCreate()에서 복잡하고 시간이 많이 소요되는 작업을 줄입니다.
- Application의 onCreate(), attachmentBaseContext ()는 복잡하고 시간이 많이 걸리는 작업을 줄여주지만, 많은 앱의 경우 여기에서 다수의 구성 요소 및 서비스에 대한 초기화 작업을 수행합니다.
- 테마 설정으로 사진을 시작창으로 표시하는 등 맞춤형 시작창 제공 #
- 6. 🎜🎜#
Android Lint를 사용하여 사용하지 않는 리소스 확인#🎜🎜 #사용자에게는 사용자 공간이든 네트워크든 시간이든 모두 다 리소스. 볼륨 최적화는 사용자를 위한 리소스 절약의 중요한 부분입니다. 현재 SDK 제품을 사용하고 있다면 볼륨 최적화도 마찬가지로 중요합니다.탐지 방법# 🎜🎜#
최적화 방법
Gradle의 ShrinkResource를 사용하여 APK 외부에서 쓸모 없는 코드 및 리소스 제외
- 불필요한 종속 라이브러리를 줄이고 /Jar, 요구사항을 충족하면서 작은 크기에 우선순위를 부여합니다. 코드 슬리밍, 최적화 및 난독화를 위한 Proguard 도구
#🎜🎜 ## 🎜🎜#so 파일 수를 줄이고 실제 조건에 따라 so 파일 제공
이미지 리소스 크기를 줄이고 이미지 압축을 고려하거나 사용 png/jpeg 대신 Vertor Drawable
# 🎜🎜#해당 해상도의 이미지 리소스를 선택적으로 제공
기존 이미지 재사용, 주로 코드를 통해 기존 이미지를 변환합니다.
- # 🎜🎜#
플러그인 기술 사용(프로젝트가 단순하면 사용하지 않음)
#🎜 🎜#
7. 성능 최적화- 당신의 능력을 단지 50%만 발휘하지 마십시오. 이것은 응용 프로그램에 매우 중요합니다. 두 대의 자동차가 동일한 가격으로 사용자에게 판매된다면 대부분의 사람들은 더 나은 성능을 가진 자동차를 선택할 것이라고 생각합니다. 🎜🎜#
Lint를 사용하여 정적 분석을 수행하고 Android Studio 분석->코드 검사의 개발자 옵션에서 StrictMode를 켜세요
- #🎜🎜 # 또는 활성화
- 코드 검토
최적화 방법# 🎜 🎜#데이터를 직렬화해야 하는 경우 Java에서 제공하는 것보다 Android 자체에서 제공하는 직렬화를 우선시하세요# 🎜🎜#작업 병렬화, 가능한 작업에 대한 병렬 작업, 스레드를 직접 사용하는 대신 스레드 풀의 도움으로 더 많이
적절한 데이터 구조를 선택하고 List/Set/Map을 명확히 합니다. / 스택 연산의 복잡성
문자열 연결 작업은 다음으로 제한됩니다. StringBuilder 사용
- Android를 사용하면 HashMap 대신 ArrayMap을 사용하는 등 보다 효율적인 컨테이너를 제공할 수 있습니다. 그 외에도 SparseBoolMap, SparseIntMap, SparseLongMap#🎜🎜이 있습니다. ##🎜 🎜#Enum 유형 대신 정적 상수를 사용하면 메모리 소비를 두 배 이상 줄일 수 있습니다.
- 객체 풀 기술을 사용하면, 예를 들어 문자열 제공과 같은 동일한 개체 풀#
- 캐싱 기술 사용
관련 알고리즘 및 로직을 최적화하여 불필요한 프로세스 줄이기
- JNI 사용 많은 양의 계산 로직은 이미지 처리와 같은 코루틴 so 파일이 됩니다
- 비즈니스 최적화
#🎜🎜 #위의 것 외에도 더 일반적입니다. 최적화 계획 외에도 비즈니스 최적화에도 시간을 투자해야 합니다. 예를 들어, 시간 압박으로 인해 현재 비즈니스 구현 계획이 최적이 아닌 경우가 많습니다. 여러 장의 사진 업로드를 지원하기 위해 많은 사람들이 직접 직렬 작업을 사용하지만 구현하기는 쉽지만 최적은 아닙니다.
제품마다 비즈니스가 다르기 때문에 일반적인 최적화 계획을 세우기가 어렵습니다. 생각해 볼 만한 두 가지 목표가 더 있습니다.
가능하다면 직렬 비즈니스 병렬화
가능하다면 비즈니스 프로세스를 단순화하세요. 코끼리를 냉장고에 가두는 방법은 냉장고를 열고 코끼리를 넣은 다음 마지막으로 냉장고를 닫는 것입니다.
비즈니스 최적화를 마지막에 두는 근본적인 이유는 비즈니스 최적화가 위험도가 높고 완료하려면 팀의 전반적인 협력이 필요하기 때문입니다.
Android의 사진에는 4가지 색상 형식이 있습니다. 이는
기본값은
그리고<code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);"><span style="font-size:14px;">ARGB_8888</span>
,其中ARGB分别代表的是透明度,红色,绿色,蓝色,每个值分别用8位来记录,也就是一个像素会占用4byte,共32位。
而<span style="font-size:14px;">ARGB_4444</span>
和以上很类似,但是每个值分别用4位来记录,也就是一个像素会占用2byte,共16位。<span style="font-size:14px;">RGB_565</span>
则分别用5位,6位,5位来记录每个值,不存在透明度,每个像素会占用2byte,共16位.<span style="font-size:14px;">ALPHA_8</span>
:该像素只保存透明度,会占用1byte,共8位。
在实际应用中而言,值推荐使用<code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63);"><span style="font-size:14px;">ARGB_8888</span>以及<span style="font-size:14px;">RGB_565</span>
,如果你不需要透明度,那么就选择<span style="font-size:14px;">RGB_565</span>
ARGB_8888, ARGB는 각각 투명도, 빨간색, 녹색, 파란색을 나타냅니다. 각 값은 8비트로 기록됩니다. 즉, 1픽셀은 4바이트를 차지합니다. , 총 32비트.이상 매우 유사하지만 각 값은 4비트로 기록됩니다. 즉, 한 픽셀이 2바이트를 차지하여 총 16비트를 차지합니다. 🎜🎜
<a href="http://www.php.cn/course/list/56.html" target="_self">ARGB_4444</a>
🎜RGB_565🎜
🎜은 별도로 사용됩니다. 5비트, 6비트, 5비트로 각 값을 기록하며 투명도가 없으며 각 픽셀은 2바이트, 총 16비트를 차지합니다. 🎜🎜🎜ALPHA_8🎜
🎜: 이 픽셀은 투명도만 저장하며 1바이트, 총 8비트를 차지합니다. 🎜실제 응용 프로그램에서는 🎜🎜 ARGB_8888을 사용하는 것이 좋습니다. 🎜
🎜 및 🎜🎜RGB_565🎜🎜, 투명성이 필요하지 않다면 🎜<code style="font-family:'Source Code Pro', monospace;font-size:12.6px;color:rgb(63,63,63); 를 선택하세요. ">🎜RGB_565🎜
🎜, 메모리 사용량을 절반으로 줄일 수 있습니다. 🎜🎜🎜【추천 코스: 🎜Android 비디오 튜토리얼🎜】🎜
위 내용은 Android 애플리케이션 최적화 백과사전용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!