Android 제품 개발 (2) --> 시작 페이지 최적화

5875 단어
지난 글에서 우리는 Android의 인코딩 규범을 소개했다. 여기서 나는 모두가 팀워크에서 인코딩 규범을 약정하는 것을 강력히 건의한다. 비록 매우 규범화되지 않은 규범이라도 규범이 없는 것보다 훨씬 낫다. 특히 팀워크 제품의 연구 개발은 제품의 지속적인 교체 과정에서 인코딩 규범이 제품 교체에 대한 장점을 더욱 깨닫게 될 것이다.물론 여기서 여러분이 반드시 글에서 제시한 인코딩 규범에 따라 팀에서 사용하는 인코딩 규범으로 삼아야 하는 것이 아니라 팀워크에서 자신의 인코딩 규범을 약정할 수 있기를 바랍니다. 설령 그것이 매우 규범이 아니더라도 구체적인 인코딩 규범은 참고할 수 있습니다. 안드로이드 제품 연구 개발(一)-> 실용 개발 규범입니다.
이 글에서 우리는 주로 시작 페이지의 최적화를 소개했다. 시작 페이지의 최적화는 UE에 관한 내용이다. 느린 시작 페이지는 사용자로 하여금 견딜 수 없게 하고 앱을'탈출'하게 하기 쉽기 때문에 제품이 더 좋은 사용자 체험을 하려면 시작 페이지의 최적화를 하는 것이 좋은 선택이다.여기서 우리는 내가 실천에서 시작 페이지에 대해 어떻게 최적화했는지 간단하게 소개한다.
회사 제품이 사용하는 데이터 통계 제품은 유맹이다. 최근에 제품 매니저가 유맹 데이터를 볼 때 앱이 시작 페이지에서 높은 확률을 보였다. 시작 페이지의 평균 시작 시간은 2.8s이다. 다음과 같은 그림을 쓴다.
나니야, 2.8s에 앱을 시작했어. 이게 무슨 일이야. 최적화해...
어쩔 수 없다. 2.8s 시작 페이지의 시간이 좀 길고 사용자가 첫 페이지에서 점프하는 확률도 좀 높다. (이곳에서 점프율의 개념을 보급하자면 사용자가 현재 페이지에서 앱을 떠나는 상황은 말하자면 시작 페이지의 시작 시간이 너무 길어서 많은 사용자들이 기다리지 못하고 시작 페이지에서 앱을 떠나는 것이다).
그러면 시작을 최적화할 때 우리는 시작 페이지의 논리를 점차적으로 분석하고 시작 페이지의 실행 논리를 익혀야만 시작 페이지의 마운트 속도를 더욱 최적화할 수 있다.
  • 시작 페이지 네트워크 요청 최적화
  • (1) 우리는 시작 페이지에서 무엇을 했습니까?우리의 시작 페이지는 주로 시작 페이지를 보여주고 네트워크 설정 정보를 불러오는 데 사용됩니다.구체적으로 다음과 같습니다.
      App h5   url  
    
            
    
                   
    
              ,                   ,        
    

    (2) 최적화할 수 있는 부분?이렇게 보면 우리가 시작 페이지에 네트워크 요청이 있기 때문에 주동적으로 3초 동안 첫 페이지를 돌려야 하기 때문에 우리의 시작 페이지가 너무 느리게 불러오기 때문에 우리의 가장 중요한 최적화 부분은 바로 네트워크 요청과 시간 지연 이동이다.
    (3) 어떻게 최적화합니까?현재의 논리는 설정 정보가 추출에 성공하든 안 하든 3초 동안 메인 페이지를 돌려야 한다는 것이다. 이렇게 고려할 수 있다. 만약에 이 세 가지 설정 정보가 추출되는 시간이 3초보다 적으면 3초 동안 메인 화면을 돌릴 필요가 없다.생각이 이미 나왔으니 나머지는 구체적으로 실현된 것이다.
    (4) 페이지 네트워크 요청 최적화를 시작하는 구체적인 실천
    timer = new Timer();timerTask = new TimerTask () {@Override public void run () {if (isGo To Complete) {L.i ("2s 완료 대기, timer 작업 취소..."); cancelTimer (); return;if(isLoadStartQueryComplete & & & isLoadUserInfoComplete) {//안내도 L.i가 이미 표시되었습니다("StartActivity에서 네트워크 요청 완료, 점프 논리 실행...").  handler.sendEmptyMessage(eventWhat);L.i("StartActivity에서 네트워크 요청 완료,timer 작업 취소...");  cancelTimer();  }  }  };  timer.schedule(timerTask, 0, 100);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    

    여기서 우리는 100ms마다 이 두 개의 네트워크 설정 정보를 끌어당기는 비동기 메시지가 완성되었는지 판단하기 위해timer퀘스트를 만듭니다. 완성되면handler메시지를 보내서 메인 인터페이스로 이동하고 2초 안에 끌어당기는 퀘스트가 완성되지 않으면 직접 이동하는 동시에timer퀘스트를 취소합니다.
    간단하게 말하면 시작 페이지의 가장 긴 대기 시간은 2초이다. 만약에 2초 안에 시작 페이지의 네트워크 요청 정보가 완성되지 않았다면 바로 메인 페이지로 이동하기를 기다리지 않았을 것이다. 만약에 2초 안에 시작 페이지의 네트워크 요청이 실행된다면 직접 이동하는 것은 2초 후에 다시 이동할 필요가 없다.이렇게 하면 우리가 페이지를 시작하면 네트워크 요청에 따라 불러오는 시간을 크게 단축할 수 있다.
  • 시작 페이지 효과 최적화
  • 현재 거의 모든 안드로이드 앱은 시작할 때 켜는 화면과 유사한 것이 있다. 흔히 켜는 인터페이스이다. 위에 이 프로그램의 알림 문자, 애니메이션 등이 쓰여 있고 이 켜는 인터페이스는 점차적인 변화를 실현한다. loading 등 효과가 있다. 이렇게 하면 페이지를 시작하는 데 시간이 비교적 오래 걸리면 사용자도 시간이 길다고 느끼지 않는다.참기 힘들다. 물론 이런 방식은 시각적 효과에서 '시작 페이지의 마운트 속도가 매우 빠르다' 는 효과를 초래할 뿐이다.
    이 슬라이드에서는 시작 페이지의 애니메이션 효과를 간단하게 구현합니다.
    //그래디언트 디스플레이 시작 화면 알파 애니메이션 = new 알파 애니메이션(0.3f, 1.0f).  alphaAnimation.setDuration(2000);  contentView.startAnimation(alphaAnimation);  alphaAnimation.setAnimationListener(new AnimationListener() {@Override public void on Animation End(Animation arg0) {L.i(시작 페이지 애니메이션 실행 완료...);  }
            @Override
            public void onAnimationRepeat(Animation animation) {
                L.i("          ...");
            }
    
            @Override
            public void onAnimationStart(Animation animation) {
                L.i("          ...")
            }
    
        });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    

    여기의 콘텐츠 뷰는 바로 저희 시작 페이지Activity의 메인 뷰입니다. 그래서 이곳의 실행 효과는 바로 저희 시작 페이지Activity의 인터페이스의 투명도가 점점 증가하는 것입니다. 이렇게 하면 사용자가 보기에는loading 효과가 있기 때문에 불러오는 속도가 매우 빨라 보입니다.
  • 시작 페이지에 블랙 스크린이 없음
  • 여기에 안드로이드 앱 시작 페이지의 블랙스크린 문제도 소개한다. 안드로이드 개발 앱을 시작할 때 특별한 처리를 하지 않으면 한순간의 블랙스크린 현상이 나타난다. 인터넷에서는 이런 상황에 대해 보통 두 가지 해결 방식이 있다.
    (1) App 시작 페이지는 그림 또는 drawable 파일입니다.
    @drawable/start_background
    1
    
    1
    

    전체 앱의 스타일 파일을 설정하고 안드로이드:window Background 속성을 그림이나drawable 파일로 설정합니다. 이렇게 하면 앱이 시작하는 과정에서 시작 페이지의 그림이나drawable 파일을 표시합니다.
    (2) App 시작 페이지는 Layout 파일입니다.
    이럴 때 App 스타일에 백그라운드를 설정할 수 없고 그 다음으로 주류를 추구하는 방식은 흰색 배경을 설정하는 것이다.
    @color/c10
    1
    
    1
    

    여기 @color/c10은 바로 우리가 정의한 흰색 색 값입니다. 이렇게 처리하면 앱이 시작될 때 블랙스크린 효과가 나타나지 않습니다.
  • Application 시작 속도 최적화는 우리의 응용 프로그램 시작 과정이 먼저 Application을 실행하여 생명주기 방법을 실행하는 방법(onCreate 방법)에 창설되기 때문에 구체적인 것은 나의 안드로이드 응용 프로세스 시작 프로세스를 참조할 수 있다. 안드로이드 소스 해석의 (11) – > 응용 프로세스 시작 프로세스
  • 그래서 앱의 시작 속도를 높이고 Application의 집행 시간을 가속화하는 것도 중요한 부분이다. 여기서 나는 몇 가지 원칙을 잠시 정리했다.
                Application ;
    
    Application                 ;
    
     App            dex    ;
    
     Application     ,        
    
  • 시작 페이지 차단 반환 버튼
  • 일반적인 우리의 앱에서 시작 페이지에서 인터넷 조작, 초기화 설정 등을 수행하기 때문에 이때 우리는 사용자가 리턴 버튼을 누르고 앱을 종료하는 것을 원하지 않는다. 그래서 우리는 시작 페이지에서 리턴 버튼을 차단해야 한다. 여기서 구체적인 실현을 간단하게 소개한다.
    /** startActivity 차단 물리적 반환 버튼 * @param keyCode * @param event * @return */@Override public boolean on KeyDown (int keyCode, KeyEvent event) {if (keyCode = = KeyEvent.KEYCODE BACK) {return true  }  return super.onKeyDown(keyCode, event);  }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    

    시작 페이지Activity의onKeyDown 방법을 다시 씁니다. 사용자가 눌렀는지 여부를 먼저 판단하고, 만약 눌렀으면 바로true로 돌아가며, 되돌아오는 키의 후속 실행 논리를 차단합니다.버튼 반환 실행 프로세스에 대해서는 Android 시스템에서 버튼 반환 실행 프로세스를 참조하십시오:Android 소스 해석(209) – > 응용 프로그램에서 버튼 반환 실행 프로세스
    이상은 개인 총결의 시작 페이지에서 몇 가지 요점이나 주의해야 할 점, 개인 능력이 부족하고 잘못된 점이 있으면 바로잡아 주십시오.
    또한 제품 연구 개발 기술, 기교, 실천에 관심이 있는 학생은 저를 참고할 수 있습니다. 안드로이드 제품 연구 개발 – > 요약(지속적인 업데이트) 안드로이드 제품 연구 개발 (一) – > 실용 개발 규범
    이 문서는 github에 동기화됩니다.https://github.com/yipianfengye/AndroidProject, 스타와 팔로우를 환영합니다.

    좋은 웹페이지 즐겨찾기