APK 개발 프레임 워크! 자세한 Android 사용자 정의보기, Android 게시물

머리말

위대한 사람은 이렇게 말했습니다.

책은 인간 진보의 사다리입니다.
에는 황금의 집이 있고 책에는 Yan Ruyu가
있습니다. 독서
책을 뚫습니다 . 글에 신이 있다면 책은 유일한 불멸의 것입니다.
책은 인류에게 위대한 천재의 유산입니다.

최근 많은 친구들이 제 공식 계정에서 "Android 개발을위한 기본 교과서 및 학습 경로", "Android 개발 입문 자습서에 대한 권장 사항은 무엇입니까?"및 기타 유사한 질문과 같은 유사한 질문을했습니다. 이러한 질문에 계속 답변하고 있습니다. 반복적으로 영감을 얻었 습니다 .2020ndroid 개발 핫북 권장 사항 을 수행하려면  Xiaobai-Android 선임 엔지니어 시리즈 학습 경로 책 소개 아이디어 에서 큰 젖소 개발의 학습 경험을 구성하고 수집하여 우회를 피하고 성장할 수 있습니다. 더 빨리. 이 기사가 초보자를 다루는 모든 사람에게 좋은 답변이되기를 바랍니다.

여기에서 Android 시니어 아키텍트의 고급 지식 시스템 다이어그램을 제공하고 직접 가져 오세요!

다음으로이 길을 따라 소개해 드리겠습니다. 저와 제 주변의 친구들이 좋은 책을 읽었습니다.

메모리 누수 란 무엇입니까?

메모리 ML (Memory Leak)를 사용할 필요가 없지만 릴리스 된 프로그램으로 되돌릴 수없는 경우 응용 프로그램 메모리의 현상 인 메모리 누수

메모리 누수 및 해당 솔루션은 무엇입니까?

최종 분석에서 메모리 누수의 원인은 복구해야하는 변수의 메모리가 다른 변수에 의해 유지되면 메모리 복구가 실패하기 때문입니다.

일반적인 이유는 다음과 같습니다.

1. 비 정적 내부 클래스 / 익명 클래스

  • 이유 1 : 非静态内部类/匿名类 Handler외부 Activity/Fragment개체에 대한 참조를 보유 하고 있으며 Activity/Fragemnt파괴되었을 때 재활용되지 않았습니다.

  • 해결책:

    1. 핸들러 클래스를 정적 ​​내부 클래스 + 약한 참조 ( WeakReference)로 변경하여 참조 를 보유 Activity합니다 (정적 클래스는 기본적으로 외부 참조를 보유하지 않음).
    2. 외부 클래스 (일반적으로 Activity/Fragment)가 수명주기를 종료하면 Handler 큐를 지 웁니다.
  • 이유 2 : 非静态内部类的实例(对象)= 静态实例(수명주기 = 애플리케이션 수명주기)

  • 해결책:

    1. 클래스를 정적 ​​클래스로 변경 (정적 클래스는 기본적으로 외부 참조를 보유하지 않음)
    2. 클래스를 추출하고 싱글 톤으로 캡슐화합니다.
  • 이유 3 : 다중 스레드 작업자 스레드가 작업을 처리 할 때 외부 클래스를 폐기해야합니다. 이때 작업자 스레드는 외부 클래스에 대한 참조를 보유하고 있으며 재활용 할 수 없습니다.

  • 해결책:

    1. 스레드 클래스 클래스를 정적 ​​클래스로 변경합니다 (정적 클래스는 기본적으로 외부 참조를 보유하지 않음).
    2. 외부 클래스가 수명주기를 종료 할 때 스레드를 강제 종료합니다.

2. 수집

  • 이유 : 컬렉션 클래스는 요소를 추가 한 후 컬렉션 요소에 대한 참조를 보유하므로 컬렉션 요소를 수집 할 수 없게되어 메모리 누수가 발생합니다.

  • 해결책:

    1. 컬렉션 클래스가 요소 객체를 사용한 후에는 컬렉션에서 요소를 삭제해야합니다 (컬렉션에 여러 요소가 있기 때문에 가장 간단한 해결책은 컬렉션 객체를 비우고 (정리) Null로 설정하는 것입니다).

3. 자원 객체는 사용 후 닫히지 않습니다.

  • 원인 :이 자원 활동 / Fragemnt이 같은 회복으로 이어질하지 않습니다 파괴 될 때 자원 객체가 로그 오프 / 아니오 오프가없는, 사용 후 폐쇄되지 않은 广播BraodcastReceiver, 文件流Fire, 图片资源Bitmap, 数据库游标

  • 해결책:

    1. Activity폐기시 적시에 리소스 닫기 / 등록 취소

4. Static 키워드는 멤버 변수를 수정합니다.

  • 이유 : 정적 키워드 수정 된 멤버 변수 라이프 사이클 = private static Context mContext = context컨텍스트에 해당하는 컨텍스트 등의 라이프 사이클 애플리케이션을 Activity복구 할 수 없음

  • 해결책:

    1. 정적 멤버 변수 참조를 사용하지 말고 강력한 참조 대신 약한 참조를 사용하십시오.
    2. 싱글 톤 패턴 사용

4. 기타 용도

  • 이유 1 : 컨텍스트 : Activity context참조 된 개체가 아직 사용 Activity중일 때 폐기해야 할 때 재활용 할 수 없습니다.

  • 해결책:

    1. 올바른 context참조는 수명주기를 초과해서는 안됩니다.
    2. 사용 ApplicationContext하는 대신
  • 이유 2 : WebView : WebView 개체가 더 이상 사용되지 않은 후에도 시간 내에 파괴되지 않아 메모리 사용량이 발생합니다.

  • 해결책:

    1. 다중 스레드를 통해 더 이상 사용되지 않는 WebView개체를 제거 합니다.
  • 이유 3 : 어댑터 : ListView와 RecycleView를 슬라이딩하여 새 View를 얻을 때 View 개체가 getView ()에서 다시 인스턴스화되어 리소스가 낭비되고 메모리 사용량이 점점 커집니다.

  • 해결책:

    1. 캐시 된 사용convertView
    2. 직접 사용ViewHolder

플러터 외에도 Android 개발에서 마스터해야 할 것은 무엇입니까?

안드로이드 개발에 종사하는 대부분의 친구들은 구직이 점점 더 어려워지고 있으며, 면접 요건도 점점 높아지고 있다고 생각합니다.

Java, 데이터 구조 알고리즘 및 디자인 패턴에 대한 탄탄한 기본 지식 외에도 기본 소스 코드, NDK 기술, 성능 튜닝 및 flutter와 같은 일부 소규모 프로그램 및 크로스 플랫폼이 아래 그림에 나와 있습니다. 마인드 맵;

문서를 클릭하면 인터뷰 자료와 비디오 자습서를 얻을 수 있습니다. [Ali P7 수준 Android 설계자 기술 마인드 맵 + 전체 비디오 세트]

9D % A2 % E8 % AF % 95 % E6 % 8B % BF % E9 % AB % 98 % E8 % 96 % AA % EF % BC % 81.md) **

[외부 링크 이미지 전송 중 ... (img-xYPrZ6zZ-1611397302162)]

추천

출처blog.csdn.net/weixin_52746928/article/details/113059782