앤드류스 (안드로이드 앱) 성능 최적화, 문제 Caton, 메모리 오버 플로우의 시리즈를 해결하기 위해

사실, 온라인 성능 최적화 앤드류스 그래서 모든 노하우 성능 문제를 쓰고 싶다 평소에도 많은 경험들이 함께 오늘 쓰고 싶은, 갑자기 이전에 주목하지 않는 점을보고하지 않았다 많은 기사를 썼다 모두 함께, 내가이 글을 계속 업데이트됩니다.

1. 재활용

        보통 경우, 고정 변수의 속성을 액세스 할 때보다 낮은 효율이 5보다 종종 더 큰 사이클의 수의 당신의 추정,
일반 가정은 값이 같은 우리가 기록 될 것입니다 정상적인 상황에서보다 큰 5 xxx.GetLength () 메소드임을
위한 ( 내가 0 INT를 = 나는 <xxx.GetLength (); 내가 ++)
xxx.GetLength 여기에 호출 할 필요가 각각의주기가 불가피 게임 개발, 프로그램의 효율성에 영향을 미칠하게 더 분명,
개선 된 방법이 있어야한다
INT J = xxx.GetLength ()
대 (INT I = 0; I <J; I ++)  

이 급여의 관심에 우리는 일반적으로 하드 작은 점에 유사하기 때문에 나는이 내가이 점을보고 처음 쓸 때 왜 먼저이 물품.

2. 최적화 사진

        이 개발의 시작 부분에 발생하는 가장 큰 문제 I이며, 메모리는 유출에 의한 사진입니다.

       A.이 첫 번째 작가는 우리의지도로드가 너무 큰 그림을 위해 내가 사이트를 추천 할 때 메모리에지도 너무 커서에 제공 종종 있기 때문에, 문제의 이미지 크기

https://tinypng.com/ ,이 사이트 화상 무손실 압축 될 수 있고, 압축율은 매우 높은, 매우 좋다. 그것은 SVG에 대한 제안 된 작품을 보여주는 몇 가지 작은지도이며, 우리는 안드로이드 스튜디오로 변환하면 당신은 좋은 최적화 결과를 재생할 수 있도록, 벡터 형식으로 기능이 함께 제공됩니다.

       II. 좋은에 대한 준비가 만든 프레임 워크가 없기 때문에 자원 사용의 그림 인해 메모리 오버 플로우에 공개되지 않은 이후로는, 우선 당신은 당신이 당신의 자신의 레벨 셋 캐시를 작성하지 않는 것이 좋습니다있는 세 가지 수준의 캐시 아키텍처, 사진을 볼 필요가 왜 시간 낭비, 그러나 확실하게 많은 자신의 문제를 작성하는,하지만 우리는 몇 가지 이미지 로딩 프레임 다음 부하에 여러 이미지를 사용하는 것이 좋습니다이 프레임 워크를 직접 있도록 원칙을 포함 이해해야하는 것은 이제 주류 프레임 워크, 매우 효과적 일 수있다 많이 사용되는 처음 세 미만의 사람들과 프레스코뿐만 아니라 자신의 구글을 사용하는 방법 장점과 각 스피커의 단점으로, 문제의 이미지 메모리 오버 플로우를 해결한다.

당신이 멀리 볼 수 있습니다 당신은 거인의 어깨를, 좋은 프레임 워크 및 도구를 많이 사용에 서 배워야한다

문자열 접합을 3.String

      우리는 종종 만남의 문자열 연결 코드를 작성할 때, 그러나 우리는 대부분 두 개의 문자열이 추가 작성하는 방법입니다, 이것은 실제로 매우 비효율적 인 방법이며, 우리는 실제로 대부분 사용 바느질에 StringBuffer를하고 모두 StringBuilder는, 다음은이 세 가지 방법의 비교 접합 효율이다

String s = "";
long sBeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
     s+="s";
}
long sEndTime = System.currentTimeMillis();
System.out.println("s拼接100000遍s耗时: " + (sEndTime - sBeginTime) + "ms");
         
StringBuffer s1 = new StringBuffer();
long s1BeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
     s1.append("s");
}
long s1EndTime = System.currentTimeMillis();
System.out.println("s1拼接100000遍s耗时: " + (s1EndTime - s1BeginTime) + "ms");
         
StringBuilder s2 = new StringBuilder();
long s2BeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
    s2.append("s");
}
long s2EndTime = System.currentTimeMillis();
System.out.println("s2拼接100000遍s耗时: " + (s2EndTime - s2BeginTime) + "ms");

     

     이 테스트의 결과, 그것은 분명 그 상당히 낮은 효율 인 + 문자열 연결, 및 접합 효율 백 또는 + 접합을 사용하여 수천 번과 StringBuffer를위한 모두 StringBuilder StringBuffer와의 APPEND () 메소드의 사용의 사용 불가피한에 대하여 스레드 안전성의 StringBuffer, StringBuilder에 약간 낮은 효율을 달성하기 때문에, 이는 모두 StringBuilder보다 효율적. 따라서, 문자열의 축적 동작, 스레드 선정 문제 제안 조합은 + 스트링 연결을 사용하여 피.

4. 릴리스되지 않은 자원

     전화 cursor.close () 해제에 확인 커서를 사용 후,

     또한, 우리가 종료하는 것을 잊지 마세요 작업을 수행 () postDelayed에 핸들러를 사용하는 데 사용, 모든 메시지와 콜백 함수를 제거 handler.removeCallbacksAndMessages (널)를 호출합니다.

 

게시 24 개 원래 기사 · 원 찬양 5 ·은 20000 +를 볼

추천

출처blog.csdn.net/qq_26923265/article/details/85340872