Android 메모리 누 출 원인 및 해결 방법
OutOf Memory Exception 은 흔히 볼 수 있 는 우울 한 오류 이자 프로그램 이 의외로 닫 히 는 주요 원인 중 하나 이다.
"만약 응용 프로그램 이 어제 잘 실행 되 었 다 면 왜 지금 이런 상황 이 발생 했 을 까?"이 문 제 는 안 드 로 이 드 개발 자 와 초보 자 들 을 곤 혹 스 럽 게 한다.
OutOf Memory 이상 을 초래 하 는 잠재 적 인 원인 은 여러 가지 가 있 지만 그 중에서 가장 흔히 볼 수 있 는 것 은 메모리 누 출-응용 프로그램의 메모리 분배 가 방출 되 지 않 았 다 는 것 이다.본 고 는 효과 적 인 생명 주기 관리(개발 과정 에서 중요 하지만 무시 되 는 부분)를 통 해 이러한 위험 을 최소 화 하 는 방법 을 설명 할 것 이다.
왜 안 드 로 이 드 시스템 에 메모리 누 출 이 발생 합 니까?
문 제 는 간단 하 다.어떤 대상 들 은 수명 이 끝 날 때 삭제 되 어야 한다.
이론 적 으로 프로 세 스 가 onStop 이나 onDestroy 를 사용 하여 종 료 될 때 이 메모 리 를 처리 해 야 합 니 다.그러나 남용 대상 인용 은 쓰레기 수집 기 가 사용 되 지 않 은 대상 을 방출 하 는 것 을 막 을 수 있다.예 를 들 어 사용 하지 않 은 대상 A 가 사용 하지 않 은 대상 B 를 인용 하면 불필요 한 대상 두 개 를 얻 을 수 있 습 니 다.쓰레기 수 거 기 는 서로 인용 하고 있 기 때문에 영원히 방출 되 지 않 습 니 다.
메모리 누 출 을 막 는 흔 한 기술
개발 자 들 은 죽음 을 막 기 위해 많은 절 차 를 밟 을 수 있다.
위의 기본 적 인 절 차 를 마치 면 더 중요 한 일 을 할 때 가 되 었 습 니 다.응용 프로그램 활동 의 생명 주기 입 니 다.만약 우리 가 생명 주 기 를 정확하게 관리 하지 못 한다 면,우 리 는 결국 메모리 가 더 이상 필요 하지 않 을 때 그것 을 끊 을 것 이다.
이것 은 많은 다른 임무 에 관련된다.모든 이벤트 에 대해 저 희 는 스 레 드 를 중단 하고 RxJava 의 구독 을 제거 하 며 AsyncTask 인용 을 취소 하고 이 이벤트 의 인용(그리고 이와 관련 된 모든 활동)을 정확하게 삭제 해 야 합 니 다.이 모든 임 무 는 개발 자의 많은 시간 을 소모 할 것 이다.
모델 보기 디 스 플레이(MVP)는 일 을 더욱 복잡 하 게 만 들 고 MVP 는 Android 에서 사용자 인터페이스 를 구축 하 는 데 자주 사용 되 는 구조 모델 이다.그러나 MVP 는 보기 에서 업무 논 리 를 분리 하 는 데 유용 하 다.
MVP 모델 에서 View 와 Presenter 는 모두 그들의 행위 계약 의 추상 적 인 실현 이다.MVP 를 실현 하 는 가장 흔 한 방법 은 이벤트/세 션 을 보기 의 실현 으로 사용 하고 보기 참조 에 익숙 한 시연 자 를 위해 간단 한 실현 을 사용 하 는 것 이다.
그래서 우 리 는 결국 Presenter 참조 가 있 는 보기 와 보기 참조 가 있 는 Presenter 를 얻 었 다.
이러한 잠재 적 인 어려움 을 고려 하여,우 리 는 생명주기 에 만들어 진 여분의 메모 리 를 제거 하기 위해 적당 한 관리 구 조 를 세 울 필요 가 있다.몇 가지 효과 적 인 방법 으로 이 점 을 할 수 있다.
1.Android Studio 에서 Android Arch Lifecycle 을 사용 하여 라 이 프 사이클 을 지원 하 는 구성 요 소 를 만 듭 니 다.
라 이 프 사이클 감지 구성 요 소 는 지능 적 이다.예 를 들 어 메모리 제 거 를 통 해 다른 구성 요소(예 를 들 어 활동 이나 세 션)의 수명 주기 상태 변경 에 반응 할 수 있 습 니 다.이것 은 코드 가 더욱 가 볍 고 메모리 효율 이 높다 는 것 을 의미한다.
archlifecycle 는 Android 의 새 라 이브 러 리 로 수명 주 기 를 지원 하 는 구성 요 소 를 구축 하 는 도 구 를 제공 합 니 다.라 이브 러 리 는 추상 적 인 방식 으로 일 하 는데 이것 은 생명주기 소유자 가 특정 임무 와 활동 을 관리 하 는 생명주기 에 대해 더 이상 걱정 할 필요 가 없다 는 것 을 의미한다.
Arch 라 이 프 사이클 의 핵심 도구 와 정 의 는 다음 과 같 습 니 다.
4.567917.라 이 프 사이클:정렬 시스템 은 어떤 대상 이 안 드 로 이 드 라 이 프 사이클 을 가지 고 있 는 지 정의 하고 감 시 를 허용 합 니 다
다음은 아주 기본 적 인 실현 입 니 다.우리 가 말 한 것 을 보 여 드 리 겠 습 니 다.
interface View: MVPView, LifecycleOwner
class RandomPresenter : Presenter<View>, LifecycleObserver {
private lateinit var view: View
override fun attachView(view: View) {
this.view = view
view.lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.On_DESTROY)
fun onClear() {
//TODO: clean
}
2.시연 자 와 LiveData 로 Android 구조 보기 모델 사용또 다른 방법 은 보기 모델 의 메모리 누 출 을 피하 기 위해 새로운 생명주기 구성 요 소 를 사용 하 는 것 이다.
ViewModel 은 추상 적 인 클래스 로 onClear 라 는 함 수 를 실현 합 니 다.특정한 대상 을 삭제 해 야 할 때 이 함 수 는 자동 으로 호출 됩 니 다.ViewModel 은 프레임 워 크 에 의 해 생 성 되 었 습 니 다.창조 자의 생명 주기 에 추가 되 었 습 니 다.(추가 적 인 장점 으로 Dagger 를 사용 하여 주입 하 는 것 이 매우 쉽 습 니 다)
뷰 모델 을 사용 하 는 것 외 에 라 이브 데 이 터 는 중요 한 통신 채널 도 제공 했다.이것 은 쉽게 관찰 할 수 있 는 반응 성 산물 을 만 들 었 다 는 것 을 의미한다.
여기 서 가장 중요 한 것 은 라 이 프 사이클 소유자 가 LiveData 를 관찰 할 수 있 기 때문에 데이터 전송 은 항상 라 이 프 사이클 에 의 해 관리 되 고 사용 할 때 어떠한 인용 도 유지 할 수 있 도록 확보 할 수 있다 는 것 이다.
3.LeakCanary 와 Bugfender 사용
상기 절 차 를 제외 하고 우 리 는 두 가지 중요 한 공구 꾸러미 를 추천 하고 싶 습 니 다.LeakCanary,누설 을 감시 하 는 유행 도구,그리고 우리 자신의 Bugfender.
LeakCanary 는 Android 와 자바 에 사용 되 는 메모리 검사 라 이브 러 리 입 니 다.그것 은 개원 적 인 것 이기 때문에 거대 한 지역 사회 가 그것 을 지원 한다.그것 은 너 에 게 구멍 을 알려 줄 뿐만 아니 라 가능 한 원인 도 알려 준다.
원 격 로그 도구 Bugfender 는 단일 누 출 추적 을 디 버 깅 하고 DisplayLeakService 라 는 종 류 를 확장 할 수 있 습 니 다.언제 누 출 되 는 지 알 수 있 습 니 다.그리고 우 리 는 Bugfender 로 쉽게 로그 인 할 수 있 습 니 다.
public class LeakUploadService extends DisplayLeakService {
override fun afterDefaultHandling(heapDump: HeapDump, result: AnalysisResult, leakInfo: String) {
if (result.leakFound) {
Bugfender.d(“LeakCanary”, result.toString())
}
}
}
또한 사용 자 는 전 천후 기록 로그(장치 가 오프라인 되 더 라 도),내 장 된 고장 보고서 와 사용 하기 쉬 운 웹 콘 솔 을 포함 하여 Bugfender 의 모든 장점 을 얻 을 수 있 습 니 다.이상 은 안 드 로 이 드 메모리 누 출 의 원인 및 해결 기법 에 대한 상세 한 내용 입 니 다.안 드 로 이 드 메모리 누 출 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.