안 드 로 이 드(Android)의 성능 최적화 분석

Android 성능 의 최 적 화 는 주로 두 가지 로 나 뉜 다.
1.레이아웃 최적화
2.메모리 최적화
레이아웃 최적화
먼저 레이아웃 최 적 화 를 살 펴 보 자.시스템 이 UI 를 렌 더 링 할 때 대량의 자원 을 소모 하기 때문에 레이아웃 에 대한 최적화 가 특히 중요 하 다.
오 버드 로 를 피하 다
즉,과도 한 그리 기 를 피 하 는 것 입 니 다.과도 한 그리 기 는 더 많은 자원 을 낭비 할 수 있 습 니 다.예 를 들 어 안 드 로 이 드 시스템 은 기본적으로Activity배경 을 그립 니 다.이때 배경 을 하나 더 설정 하면 기본 배경 은 과도 한 그리 기 에 속 합 니 다.'개발 자 도구'에는'디버그 GPU 과도 한 그리 기'옵션 이 있 습 니 다.저희 가 열 면 색상 을 통 해 과도 하 게 그 리 는 횟수 를 판단 할 수 있 습 니 다.
그림:

그래서 우 리 는 가능 한 한 파란색 구역 을 늘 리 고 빨간색 구역 을 줄인다.
최적화 레이아웃 등급
Android 시스템 에 서 는 시스템 이 View 를 측정,레이아웃,그 릴 때View트 리 에 대한 횟수 를 통 해 이 루어 지기 때문에 하나의 레이아웃 의 등급 이 너무 많 으 면 측정,레이아웃,그리 기 속도 에 심각 한 영향 을 줄 수 있 으 므 로 View 트 리 의 높 은 수준 을 낮 춰 야 합 니 다.Google 은 문서 에서 레이아웃 의 등급 이 10 층 을 넘 지 않도록 권장 합 니 다.그래서 끼 워 넣 는 쓸모없는 레이아웃 도 피해 야 합 니 다.
include 태그 사용 하기
모두 가 프로젝트 를 할 때 toolbar 나 하나의 UI 가 여러 인터페이스 에서 사용 하 는 문제 에 부 딪 힐 것 이 라 고 믿 습 니 다.이런 문제 에 부 딪 혔 을 때 우 리 는 보통 include(큰 신 이'첫 번 째 줄 코드'를 잘 가 르 쳤 기 때문에)를 사용 합 니 다.그러면 코드 의 번 거 로 움 을 줄 이 고 후기 변경 에 도 유리 합 니 다.
ViewStub 를 사용 하여 View 의 지연 로 딩 을 실현 합 니 다.ViewStub라벨 과View.GONE방식 은 차이 가 많 지 않 지만ViewStub표시 할 때 만 렌 더 링 을 하고GONE초기 화 할 때 이미 렌 더 링 을 마 쳤 기 때문에ViewStub보다 효율 이 높다.
다음은 코드 를 통 해 사용 해 보 겠 습 니 다ViewStub우선 레이아웃 파일 을 정의 합 니 다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
  android:id="@+id/tv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>
이 안 에는 하나TextView만 넣 은 후에 우 리 는 자신의 구조 에서ViewStub를 통 해 그 를 인용 했다.

<Button
 android:id="@+id/btn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

<ViewStub
 android:id="@+id/vs"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout="@layout/view_stub"/>

이 논 리 는 단 추 를 누 르 고ViewStub인 용 된 레이아웃 이 나타 나 는 것 입 니 다.(즉,우리 가 위 에 쓴 레이아웃 파일 입 니 다.)

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
  ViewStub vs = (ViewStub) findViewById(R.id.vs);
  View vsView = vs.inflate();
  TextView tv = (TextView) vsView.findViewById(R.id.tv);
  tv.setText("hahaha");

 }
});
여기 서ViewStub인용 구 조 를 나타 내 려 면 두 가지 방법 이 있 는데 하 나 는ViewStub.setVisibility();이 고 다른 하 나 는ViewStub.inflate();이 두 가지 방법의 차이 점 은inflate()인용 구 조 를 되 돌려 주 고 이 구 조 를 통 해 안의 하위View를 찾 아 조작 할 수 있다 는 것 이다.
프로그램 을 실행 하려 면 단 추 를 누 르 면TextView이미 표시 되 었 고'haha'를 할당 하 였 습 니 다.
Hierarchy Viewer
이 도 구 는 우리 의 레이아웃 을 표시 할 수 있 지만 시 뮬 레이 터 와 공장 의 데모 기기 에서 만 사용 할 수 있 습 니 다.그러나 Google 의 큰 신 은 오픈 소스 프로젝트 인 View Server 를 제공 합 니 다.관심 있 는 것 은 볼 수 있 습 니 다.
이것 은 단지 많이 논 술 했 을 뿐 이 니,흥미 가 있 는 사람 은 스스로 관련 자 료 를 살 펴 볼 수 있다
메모리 최적화
우 리 는 모두 알 고 있 습 니 다.최근 에 안 드 로 이 드 의 업 체 는 바로 조합 설정 을 하고 있 습 니 다.그 중에서 우리 가 가장 주목 하 는 것 은 메모리 몇 개의 G 입 니 다.그러나 안 드 로 이 드 핸드폰 의 메모리 가 매우 크 지만 매우 카드 가 있 습 니 다.이것 은 어떤 핸드폰 소프트웨어 가 핸드폰 메모리 가 낮은 상황 에서 죽 일 수 없 기 때 문 입 니 다.즉,우리 가 말 한'방 살'입 니 다.
우 리 는 메모리 가 일반적으로 이 몇 부분 으로 나 뉜 다 는 것 을 안다.
     1.레지스터
     2.창고
     쌓다
     4.정적 저장 소
     5.상수 탱크
그 중에서 레지스터 의 연산 속도 가 가장 빠 르 지만,우 리 는 프로그램 에서 제어 할 수 없다.
스 택 에 기본 데이터 형식 저장
더미 에 대상 과 그룹 을 저장 하고 더미 에 있 는 것 은 자바 의 GC 에서 관리 합 니 다.
정적 저장 소 는 고정된 위치 에 프로그램 이 실 행 될 때 존재 하 는 데 이 터 를 저장 합 니 다.자바 는 정적 변 수 를 관리 하기 위해 한 구역 을 나 누 었 습 니 다.
상수 탱크 는 이 유형 이 사용 하 는 상수 의 집합 이다.
Bitmap 최적화
우 리 는 모두 안 드 로 이 드 에서 OOM 의 가장 큰 위협 이라는 것 을 알 고 있다.왜냐하면 그것 이 차지 하 는 메모리 가 매우 많 기 때문에 우 리 는 다음 과 같이 해 야 한다.
1.적당 한 해상도 크기 의 그림 사용
안 드 로 이 드 는 어 울 릴 때 해상도 가 다른 폴 더 의 그림 을 크기 조정 하여 어 울 리 기 때문에 그림 의 해상도 가 자원 해상도 와 일치 하지 않 으 면 더 많은 자원 을 소모 할 수 있 습 니 다.
2.캐 시 사용
보통 메모리 캐 시 와 하 드 디스크 캐 시가 있 습 니 다.
코드 최적화
     1.상수 사용static     2.정태 적 인 방법 을 사용 하고 정태 적 인 방법 은 일반 방법 보다 15%정도 의 방문 속 도 를 높 인 다.
     3.불필요 한 구성원 변 수 를 줄 이 고 부분 변수 로 정의 할 수 있다 면 부분 변수 로 정의 하 는 것 이 좋 습 니 다.
     4.불필요 한 대상 줄 이기
     5.매 거,교체 기 를 적 게 사용 합 니 다.
     6.Cursor,Receiver,File등 대상 에 대해 회수 와 등록 취소 에 주의해 야 한다.
     7.View 대신SurfaceView를 사용 하여 대량의 그림 그리 기 작업 을 한다.
     8.보기 캐 시 를 사용 하여 매번 실행inflate()하 는 것 이 아 닙 니 다.
     9.반사 사용 을 피한다
     10.RenderScript,OpenGL를 사용 하여 매우 복잡 한 그림 그리 기 작업 을 한다.
총결산
이상 은 안 드 로 이 드 성능 에 최 적 화 된 점 입 니 다.만약 에 안 드 로 이 드 스튜디오 를 사용한다 면 안 드 로 이 드 스튜디오 는 메모리 감시 도 구 를 제공 하고 사용 하기에 좋 습 니 다.만약 에 안 드 로 이 드 스튜디오 를 사용 하지 않 았 다 면 안 드 로 이 드 스튜디오 를 사용 하 는 것 을 권장 합 니 다.
또한 최적화 도 절대적 으로 완벽 한 것 이 없다.모든 최 적 화 는 현재 의 환경 을 바탕 으로 하 는 것 이다.소통 이 가장 좋 은 최적화 이 고 맹종 하지 않 으 며 자 유 롭 지 않 고 심사숙고 한 후에 이 루어 진 다 는 것 을 알 아야 한다.이 글 이 여러분 의 안 드 로 이 드 개발 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기