Android 제품 개발 (2) --> 시작 페이지 최적화
이 글에서 우리는 주로 시작 페이지의 최적화를 소개했다. 시작 페이지의 최적화는 UE에 관한 내용이다. 느린 시작 페이지는 사용자로 하여금 견딜 수 없게 하고 앱을'탈출'하게 하기 쉽기 때문에 제품이 더 좋은 사용자 체험을 하려면 시작 페이지의 최적화를 하는 것이 좋은 선택이다.여기서 우리는 내가 실천에서 시작 페이지에 대해 어떻게 최적화했는지 간단하게 소개한다.
회사 제품이 사용하는 데이터 통계 제품은 유맹이다. 최근에 제품 매니저가 유맹 데이터를 볼 때 앱이 시작 페이지에서 높은 확률을 보였다. 시작 페이지의 평균 시작 시간은 2.8s이다. 다음과 같은 그림을 쓴다.
나니야, 2.8s에 앱을 시작했어. 이게 무슨 일이야. 최적화해...
어쩔 수 없다. 2.8s 시작 페이지의 시간이 좀 길고 사용자가 첫 페이지에서 점프하는 확률도 좀 높다. (이곳에서 점프율의 개념을 보급하자면 사용자가 현재 페이지에서 앱을 떠나는 상황은 말하자면 시작 페이지의 시작 시간이 너무 길어서 많은 사용자들이 기다리지 못하고 시작 페이지에서 앱을 떠나는 것이다).
그러면 시작을 최적화할 때 우리는 시작 페이지의 논리를 점차적으로 분석하고 시작 페이지의 실행 논리를 익혀야만 시작 페이지의 마운트 속도를 더욱 최적화할 수 있다.
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초 후에 다시 이동할 필요가 없다.이렇게 하면 우리가 페이지를 시작하면 네트워크 요청에 따라 불러오는 시간을 크게 단축할 수 있다.
이 슬라이드에서는 시작 페이지의 애니메이션 효과를 간단하게 구현합니다.
//그래디언트 디스플레이 시작 화면 알파 애니메이션 = 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 ;
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, 스타와 팔로우를 환영합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.