안드로이드 코드 최적화 기사

우선, 선택 데이터 구조

1, 배열, ArrayList를, 목록, LinkedList의,의 HashMap, HashSet의, 해시 区别

정렬

배열 (배열) 는 선형 테이블 데이터 구조이다. 동일한 타입을 갖는 일련의 데이터를 저장하는 연속적인 메모리 공간의 세트를 사용하며, 동적 확장을 지원하지 않는다.

리니어 테이블
두 테이블, 배열, 연결리스트 디안 디안 스택 모든 선형 테이블 데이터 구조이다 큐 대부분 형태의 선형, 데이터 구조와 같은 라인에서 순방향 선형 및 후방 방향으로 각각 배치되어있다.

비선형 표
비선형 테이블 데이터는 선형 테이블 바이너리 힙 디안 디안와 반대이다으로 불규칙적 인 같은 비선형 테이블 아니라 데이터 간의 관계를 간단하게 전후.

장점 : 메모리는 인덱싱 속도가 매우 빠르고, 연속 간단한 할당을 저장 요소를 수정할 수 있습니다.

단점 : 명령문 스토리지 타입 길이의 요소의 길이를 표시해야하는 경우, 어레이의 메모리가 낭비 될 것이며, 너무 길면, 길이의 배열이 잘못된 데이터 오버 플로우를 일으킬 수 너무 짧다. 배열 삽입, 비효율적 삭제 요소.

ArrayList를

장점 :

  • 선언의 ArrayList는 용량을 동적으로 확장 할 수 있기 때문에, 그 유형, 길이를 선언 할 필요가 없다합니다.
  • ArrayList에 객체가 저장 될 때, 방패, 컴파일 시간이없는 유형 검사를 객체로, 객체의 모든 정보의 유형을 포기하지만, 런타임을 불평 할 것이다.

단점 :

  • ArrayList를 배열 확장은 많은 인자의 효율에 미치는 영향이다.
  • 때마다 실행 방법 추가는 AddRange, 삽입, InsertRange는 요소를 추가로 용량은 내부 배열이 충분히,이 경우, 그것은 배열, 새로운 복사로 이전 요소를 다시 두 번 전류 용량이 될 것인지 여부를 확인합니다 배열 한 다음 폐기 이전 배열이 중요한 시점에서 작업의 확장, 그것은 상대적으로 효율성에 영향을주지해야한다.
  • 안전 입력하지 않습니다.
  • 공정 복싱과 성능의 언 박싱 IS 손실.

목록 모음

  • 보안 유형, 저장된 데이터의 유형에 대한 설명입니다.
  • 목록 구축 할 수는 없지만 위의 목록에 대한 참조로 만들 수 있으며 ListArray을 구성 할 수있다.
  • 제네릭의 장점을 나열
      컴파일러에에서 제네릭 클래스, 보안 작업의 종류의 일반적인 기능의 작동 특정 종류 나 방법을 지정할 수 있도록하여. 이 컴파일시에 정확한 데이터 형식의 사용을 강제하기 때문에 데이터 유형을 감지하는 코드를 작성 할 필요가 정확하지 않습니다. 거짓 캐스트의 필요성과 실행의 가능성을 감소시킨다. 제네릭 타입 안전성을 제공하지만, 여러 구현의 오버 헤드를 증가하지 않았다.

LinkedList의

  • 또한 LinkedList의 목록 인터페이스 구현 클래스입니다.
  • LinkedList의는 이중 연결리스트이다. 그것은 링크 된리스트 데이터 구조의 각 엘리먼트의 공간적 분포가 매우 빠른 연속 삽입 및 삭제 요소 일 필요하다 특징이지만 속도가 느린 액세스 요소이다.
  • 추가 및하면 ArrayList를 삭제 요소보다 더 나은 성능을 가지고있다. 그러나 쿼리에 ArrayList를보다 약한 것으로 요소의 조건을 수정합니다.

해시 与의 HashMap, HashSet의

  • 동기화 : 해시 테이블이 동기화되어 스레드 안전이며, HashMap의 줄 프로그램이 안전하지 않은, 동기화되지 않습니다.
  • HashMap의 키는, NULL 값 복수 널로시켰다.
  • 키와 값의 해시 테이블은 null이 될 수 없습니다.
  • HashSet의 구현 설정 인터페이스는, 바닥이 이루어진다 해시 테이블 달성 내부 (실제로 해시 MAP), 세트 요소는 장애가 반복하지, NULL 값이 허용 될 수있다.

두, 핸들러 적절한 사용

private static class  InnerHandler extends Handler{
        private final WeakReference<MainActivity> mActivity;

        private InnerHandler(MainActivity activity) {
            mActivity = new WeakReference<MainActivity>(activity);
        }

        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            MainActivity activity = mActivity.get();
            if(activity!=null){
                
            }
        }
    }

문맥 셋째, 적절한 사용 

싱글의 적절한 사용 

public class SingleInstance {
    private Context mContext;
    private static SingleInstance sInstance;

    private SingleInstance(Context context) {
        mContext = context;
    }

    public static SingleInstance getInstance(Context context) {
        if (sInstance == null) {
            sInstance = new SingleInstance(context.getApplicationContext());
        }
        return sInstance;
    }
}

 다른 컨텍스트의 비교

네, 네 개의 마스터 자바 참조

강한 참조 : 가장 널리 하나를 사용하는 내부 자바, 기본값은 참조 형식의 개체입니다. 객체가 강한 참조가있는 경우, 다음 쓰레기 회수 기간은 그것을 작동하지 않으며, 메모리 공간이 부족하면, Java 가상 머신은 다음 응용 프로그램이 종료됩니다, OutOfMemoryError가 발생합니다.

소프트 인용구 : 하나의 객체 소프트 참조하고 충분한 메모리 공간은 메모리,이 객체가 복구됩니다 알아 경우에만, 복구 작업에 대한 회수 기간을 거부하지 않습니다이됩니다.

약한 참조 : 가비지 수집기가 현재의 메모리 공간이 부족인지의 여부를 오브젝트에만 약한 참조를 검색 할 때 재활용 약한 참조 객체에있을 것이다.

거짓 인용 : 팬텀 참조는 원래 방법은 쓰레기 수집 따를 것이다, 그러나 자연의 역할에 팬텀 참조 마크 주로 트랙이 재활용 쓰레기 활동을 객체에 사용되는 뾰족한 물체 라이프 사이클에 영향을 미치지 않는 오브젝트가 가상 참조가 존재하지 않으면, 전체 Java 가상 머신이 큐와 연관된 참조 팬텀 참조 첨가한다 가비지 때 가상 참조는 기준 큐와 함께 사용되어야한다.

다섯째, 코딩 관행

  1. 불필요한 멤버 변수를 감소 XML;
  2. 열거를 사용하지 않으려 고, 적은 반복자;
  3. 커서, 수신기, 센서, 파일 및 다른 목적, 자신의 생성, 복구 및 등록, 반 등록을 지불주의, 주석의 피할 광범위한 사용, 반사;
  4. 비우, 파괴를 기억, 방송 이벤트 취소, 웹보기 출구 인터페이스 객체를 기억하십시오.
  5. 객체를 참조하지 않고, 빈 스팸 메모리를 감지하기 쉬운, null입니다.
  6. 멀티 기본 데이터 유형, 적은 자신의 참조 데이터 유형. 이러한 정수로 INT보다 큰 공유합니다.
  7. 적은 정적 변수는 GC를 회복 할 수없는 변형 된 전역 변수를 수정.
  8. 사용 StringBuffer를이 (추가 바느질) 문자열 연결 문자열을 대체 문자열 하나 하나 더 "+", 더 객체의 생성됩니다.
  9. 비트 맵, 재활용을 기억하지 못하는 등 커서, IO 또는 파일 스트림을, 커서. 특히, 적재 대를위한 화상 메모리는, 화질이 압축 또는 물리적 크기 일 수있다.
  10. 자주 그려진 된 onDraw 방법에 객체를 생성하지 마십시오.
  11. 방지 클래스 싱글 장기 객체에 대한 참조를 보유하지, 수신의 ApplicationContext을 시도합니다.
  12. 이러한 활동으로 메모리 누수가, 핸들러를 생성 원인 비 정적 내부 클래스, 당신은 외부 객체 참조에 약한 참조를 얻기 위해 시도 할 수 있습니다.
  13. 방송 로그 아웃 페이지가 활동 종료를 취소의 스레드를 수행되지 않았거나 타이머는 정규 작업 로그 아웃 등 수행합니다.
  14. 활동 종료 시간은 필요 속성 애니메이션을 취소 할 수 있습니다.
  15. 웹보기 종료 파괴.

 

"안드로이드 고급 고급"

https://www.jianshu.com/p/cd7552bdaf6e

https://blog.csdn.net/zhuolou1208/article/details/78095293

https://blog.csdn.net/qq_30257149/article/details/99588189

게시 49 개 원래 기사 · 원 찬양 2 · 조회수 8,584

추천

출처blog.csdn.net/yangjunjin/article/details/105158956