> 일반적인 문제 > Android 애플리케이션 최적화 백과사전용

Android 애플리케이션 최적화 백과사전용

little bottle
풀어 주다: 2019-04-10 14:33:16
앞으로
2206명이 탐색했습니다.

기술 실무자라면 어떻게 해야 할지 모르는 것이 아니라 어떻게 해야 할지 모르는 경우가 많죠? 오늘 편집자는 안드로이드 애플리케이션을 최적화하는 방법에 대한 몇 가지 경험을 모아 총 정리했습니다. 8차원.

Android 애플리케이션 최적화 백과사전용

1. 레이아웃 최적화

이유는 무엇입니까?

Android 시스템은 원활한 UI 렌더링을 위해 16ms마다 VSYNC 신호를 보냅니다. 즉, 대부분의 작업이 16ms 이내에 완료되어야 합니다.

위의 인터페이스가 너무 복잡하고 렌더링이 제 시간에 완료되지 않는 것 외에도 과도한 그리기 문제도 있습니다. 소위 오버 드로잉은 동일한 프레임에서 특정 픽셀이 여러 번 그려지는 것을 의미합니다. 다중 레벨 UI 인터페이스에서 보이지 않는 UI도 그려지는 경우 이러한 겹치는 영역의 픽셀이 여러 번 그려집니다. 따라서 많은 CPU 및 GPU 리소스가 낭비됩니다. 예를 들어 레이아웃에는 자체 배경이 있고 하위 뷰에는 자체 배경이 있는 경우에도 오버드로잉이 발생합니다. HierarchyViewer를 사용하여 활동의 레이아웃이 너무 복잡한지 확인하세요

개발자 옵션에서 GPU 오버드로 표시 옵션을 켜서 오버드로가 있는지 관찰하세요

  • 개발자 옵션에서 프로필 GPU 렌더링을 선택하고 화면에서를 선택하세요 as bar

  • TraceView를 사용하여 CPU 실행을 관찰

  • 최적화하는 방법?
  • 레이아웃 수준을 줄이고 include, merge 및 ViewStub을 적절하게 사용하세요

GC

  • 커스텀 컴포넌트의 빈번한 트리거를 피하기 위해 커스텀 컴포넌트의 onDraw()에 문자열과 같은 임시 객체를 추가하세요. onDraw()에서 그려야 하는 영역을 그리려면 canvas.clipRect()를 사용하는 것을 고려해 보세요

  • ListView와 같은 구성 요소 컨테이너의 경우 ConvertView 사용을 고려하고, ViewHolder를 사용하고

  • 자동 줄 바꿈을 달성하려면 ListView 대신 RecycleView를 사용하고 정적 레이아웃을 사용하는 것이 좋습니다

  • 2. 메모리 최적화

왜?리소스는 항상 제한되어 있으며, 메모리도 리소스입니다. Android에서는 메모리 리소스를 과도하게/부적절하게 사용하면 애플리케이션이 자주 종료되며 이로 인해 궁극적으로 종료됩니다. 모든 개발자는 메모리 절약을 염두에 두어야 합니다.

LeakCanary를 사용하세요

MAT를 사용하여 Java 힙을 분석하세요

메모리 할당 정보를 추적하기 위한 모니터
  • Android Studio의 Android 모니터에서 Memory
  • 최적화 방법?
  • 미리 메모리를 해제하고 onLowMemory() 및 onTrimMemory()

  • 에서 메모리를 적절하게 해제합니다.
메모리 누수 및 메모리 오버플로 방지

비트맵을 사용할 때는 압축, 캐시 사용 또는 색상 모드 변경을 고려하세요. 예를 들어 Android의 기본 색상 형식은 ARGB_8888이며 요구 사항이 높지 않으면 RGB__565를 사용할 수 있습니다. , 각 픽셀이 차지하는 메모리는 4byte ~ 2byte가 될 수 있습니다.
  • 프레임 애니메이션의 사용을 줄이고, 필요한 경우 SurfaceView를 통해 구현하세요
  • ArrayMap/SparseArray와 같은 보다 가벼운 데이터 구조를 사용하세요
  • Service, Webview 등 관련 컴포넌트를 합리적으로 사용하고, 필요하지 않을 때는 주도적으로 사용 Life Cycle 종료
  • 메인 프로세스와 재생 프로세스로 나눌 수 있는 뮤직 플레이어 클래스 등 여러 프로세스를 합리적으로 사용하세요

  • 비동기 큐 사용 시 경계 큐를 고려하세요

  • HashMap의 크기를 확실히 알 수 있다면, 초기화할 때 용량을 설정하세요

3. 전원 최적화

왜요?

전원은 모바일 기기에 있어 매우 귀중한 리소스입니다. 조사에 따르면 일반적으로 인터페이스 렌더링과 같은 프로그램의 핵심 기능에 전력이 약 30%만 소비되고 나머지 70%는 보고 데이터, 위치 업데이트 및 백그라운드 알림에 소비되는 것으로 나타났습니다. .

감지하는 방법?

  • 전화 옵션에서 앱의 전력 소비 통계를 확인하세요

  • Battery Historian 도구를 사용하여 자세한 전력 소비를 확인하세요

최적화하는 방법

  • 깨우기 화면 횟수와 지속 시간을 줄이고 WakeLock을 올바르게 사용하세요.

  • 로그 보고 등 불필요한 작업을 충전 상태로 지연할 때 야간 충전 중에 완료할 수 있습니다. JobScheduler 사용

  • 센서 수집 사용 데이터가 더 이상 필요하지 않으면 등록을 취소해야 합니다.

  • 네트워크 통신을 줄이고 통신을 병합합니다.

  • 위치 확인 기능을 합리적으로 사용하고 위치 업데이트 빈도를 줄입니다. 실제 상황에 따라 다양한 정밀 포지셔닝 요구 사항을 사용하세요.

4. 네트워크 최적화

왜?

이제 거의 모든 앱을 인터넷에 연결해야 네트워크 최적화를 개선할 수 있습니다. 한편으로는 트래픽과 전력 손실을 줄일 수 있습니다. 또한 사용자는 여전히 네트워크 서비스 제공자이기도 합니다. 어떤 개발자도 네트워크 리소스가 무제한이라고 가정해서는 안 됩니다.

감지하는 방법

Android Studio의 네트워크 트래픽 도구를 사용하여 네트워크 요청 보기
  • Android Studio의 모니터 사용
  • Fidder 또는 Charles 및 기타 패킷 캡처 도구를 사용하여 네트워크 데이터 패킷 분석
  • 최적화 방법은?

사진이든 일반 데이터든 필요할 때 반드시 캐시하세요. LruCache와 DiskLruCache를 사용하여 나만의 캐싱 시스템을 구축하고 실제 시나리오를 기반으로 캐싱 전략을 설계하세요.
  • 과도한 네트워크 동기화 방지, 관련 네트워크 요청 병합
  • 실제 시나리오에 따라 요청 전략을 결정하고, 네트워크 작업에 고정 간격 주파수 사용을 피하세요. 예를 들어 WiFi에 연결하고 충전할 때 요청 빈도가 높을 수 있습니다. . 첫 번째 네트워크 요청이 실패한 후에는 다음 요청에 시간 간격을 두 배로 사용할 수 있습니다.
  • 데이터 전송량을 줄이고, 전송되는 데이터를 압축하는 경우 적절한 사진 형식을 선택해야 합니다. 디스플레이 크기에 따라 적절한 사양의 사진을 요청하세요. 일반 데이터의 경우 전송되는 데이터의 크기를 줄이기 위해 ProtocolBuffers를 사용하는 것을 고려할 수 있습니다.
  • 경우에 따라 직접 IP 연결을 사용할 수도 있습니다. DNS 확인 시간을 단축할 수 있고, 반면에 도메인 이름 하이재킹을 방지할 수 있습니다. 그다지 필요하지는 않지만 심리적인 관점에서 보면 시작 속도가 빨라지면 사용자에게 좋은 성능과 효율성에 대한 심리적 힌트를 주는 경우가 많습니다.
  • 탐지 방법

메소드 추적을 사용하세요trace.beginSection( ) 및 onCreate

의 Trace.endSection()
  • adb shell am start -W [packageName]/[packageName.MainActivity]을 사용하여 콜드 스타트 ​​시간 측정

  • 최적화 방법 #🎜 🎜#

    • Activity의 onCreate()에서 복잡하고 시간이 많이 소요되는 작업을 줄입니다.

    • Application의 onCreate(), attachmentBaseContext ()는 복잡하고 시간이 많이 걸리는 작업을 줄여주지만, 많은 앱의 경우 여기에서 다수의 구성 요소 및 서비스에 대한 초기화 작업을 수행합니다.

    • 테마 설정으로 사진을 시작창으로 표시하는 등 맞춤형 시작창 제공 #

    • 6. 🎜🎜#

    왜?#🎜🎜 #

    사용자에게는 사용자 공간이든 네트워크든 시간이든 모두 다 리소스. 볼륨 최적화는 사용자를 위한 리소스 절약의 중요한 부분입니다. 현재 SDK 제품을 사용하고 있다면 볼륨 최적화도 마찬가지로 중요합니다.탐지 방법# 🎜🎜#

    Android Lint를 사용하여 사용하지 않는 리소스 확인#🎜🎜 #

    최적화 방법

    • 불필요한 종속 라이브러리를 줄이고 /Jar, 요구사항을 충족하면서 작은 크기에 우선순위를 부여합니다. 코드 슬리밍, 최적화 및 난독화를 위한 Proguard 도구

      # 🎜🎜#so 파일 수를 줄이고 실제 조건에 따라 so 파일 제공

    • #🎜🎜 #
    Gradle의 ShrinkResource를 사용하여 APK 외부에서 쓸모 없는 코드 및 리소스 제외

    이미지 리소스 크기를 줄이고 이미지 압축을 고려하거나 사용 png/jpeg 대신 Vertor Drawable
    • # 🎜🎜#해당 해상도의 이미지 리소스를 선택적으로 제공

    • 기존 이미지 재사용, 주로 코드를 통해 기존 이미지를 변환합니다.

    • 플러그인 기술 사용(프로젝트가 단순하면 사용하지 않음)

    • # 🎜🎜#
    • #🎜 🎜#

      7. 성능 최적화
    • 당신의 능력을 단지 50%만 발휘하지 마십시오. 이것은 응용 프로그램에 매우 중요합니다. 두 대의 자동차가 동일한 가격으로 사용자에게 판매된다면 대부분의 사람들은 더 나은 성능을 가진 자동차를 선택할 것이라고 생각합니다. 🎜🎜#
    • Lint를 사용하여 정적 분석을 수행하고 Android Studio 분석->코드 검사의 개발자 옵션에서 StrictMode를 켜세요

    • #🎜🎜 # 또는 활성화

    • 코드 검토

    최적화 방법

    # 🎜🎜#작업 병렬화, 가능한 작업에 대한 병렬 작업, 스레드를 직접 사용하는 대신 스레드 풀의 도움으로 더 많이

    # 🎜 🎜#데이터를 직렬화해야 하는 경우 Java에서 제공하는 것보다 Android 자체에서 제공하는 직렬화를 우선시하세요

    적절한 데이터 구조를 선택하고 List/Set/Map을 명확히 합니다. / 스택 연산의 복잡성

    • Android를 사용하면 HashMap 대신 ArrayMap을 사용하는 등 보다 효율적인 컨테이너를 제공할 수 있습니다. 그 외에도 SparseBoolMap, SparseIntMap, SparseLongMap#🎜🎜이 있습니다. ##🎜 🎜#

      Enum 유형 대신 정적 상수를 사용하면 메모리 소비를 두 배 이상 줄일 수 있습니다.
    • 객체 풀 기술을 사용하면, 예를 들어 문자열 제공과 같은 동일한 개체 풀#
    • 캐싱 기술 사용

    문자열 연결 작업은 다음으로 제한됩니다. StringBuilder 사용

    관련 알고리즘 및 로직을 최적화하여 불필요한 프로세스 줄이기
    • JNI 사용 많은 양의 계산 로직은 이미지 처리와 같은 코루틴 so 파일이 됩니다
    • 비즈니스 최적화
    • #🎜🎜 #위의 것 외에도 더 일반적입니다. 최적화 계획 외에도 비즈니스 최적화에도 시간을 투자해야 합니다. 예를 들어, 시간 압박으로 인해 현재 비즈니스 구현 계획이 최적이 아닌 경우가 많습니다. 여러 장의 사진 업로드를 지원하기 위해 많은 사람들이 직접 직렬 작업을 사용하지만 구현하기는 쉽지만 최적은 아닙니다.

      제품마다 비즈니스가 다르기 때문에 일반적인 최적화 계획을 세우기가 어렵습니다. 생각해 볼 만한 두 가지 목표가 더 있습니다.

      • 가능하다면 직렬 비즈니스 병렬화

      • 가능하다면 비즈니스 프로세스를 단순화하세요. 코끼리를 냉장고에 가두는 방법은 냉장고를 열고 코끼리를 넣은 다음 마지막으로 냉장고를 닫는 것입니다.

      비즈니스 최적화를 마지막에 두는 근본적인 이유는 비즈니스 최적화가 위험도가 높고 완료하려면 팀의 전반적인 협력이 필요하기 때문입니다.

      Android의 사진에는 4가지 색상 형식이 있습니다. 이는

      Android 애플리케이션 최적화 백과사전용

      기본값은 <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비트.

      그리고

      <a href="http://www.php.cn/course/list/56.html" target="_self">ARGB_4444</a>

      이상 매우 유사하지만 각 값은 4비트로 기록됩니다. 즉, 한 픽셀이 2바이트를 차지하여 총 16비트를 차지합니다. 🎜🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:csdn.net
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿