Mobile/Android Web2012.08.01 10:53

Mobile Web 페이지 개발시 Android 4.0 이상 버젼에서의 버그 이슈사항입니다.

 

Android 4.0 이상 버젼에서 Touch Start Event 발생 후 드래그 진행시 Touch Move가 발생되고 나서 이벤트가 먹통이 되어버리는 Bug가 있습니다.

 

예를 들어 Android 4.0 미만 버젼과 iOS에서는 사용자가 터치를 시작하고 드래그시 이벤트 발생 순서가

 

TouchStart

TouchMove

TouchMove

.

.

.

TouchEnd

 

위와같이 발생한다면 Android 4.0 이상 버젼에서는

 

TouchStart

TouchMove

---------------------------------------- 이벤트 죽고 화면 스크롤 발생

 

위와 같이 TouchMove Event 이후 브라우져 스크롤이 발생되어 더이상의 이벤트가 발생되지 않습니다.

따라서 슬라이드 등의 Touch Event를 사용하는 스크립트 제작시 TouchMove에서 받는 이동 포지션값과 TouchEnd 이벤트를 잡아낼 수 없습니다.

 

위와 같은 현상을 처리하기 위해서는 Android 4.0 이상 버젼에서 TouchStart 또는 첫 TouchMove 이벤트 발생시 이벤트 전파를 방지 시켜야 합니다.

 

var isAndroid_ver4 = false;

 

if (navigator.userAgent.toLowerCase().indexOf("android 4") > -1)
    isAndroid_ver4 = true;

 

function touchStartHandler(event) {

if (isAndroid_ver4)

event.preventDefault();

}

 

또는

 

function touchMoveHandler(event) {

if (isAndroid_ver4)

event.preventDefault();

}

 

 

위 코드는 예시이고 중요한 점은 첫 TouchMove 이벤트가 발생 후 이벤트 파생을 방지해 주셔야 이벤트가 작동되지 않는 버그를 막으실 수 있습니다. 다른 주의사항은 첫 TouchStart 이벤트 또는 TouchMove 발생시 이벤트 파생을 중지 시킬 경우 화면 스크롤이 되지 않습니다. 만약 화면스크롤인지 객체 슬라이드인지를 분기처리 하실 필요가 있다면 화면 스크롤일 경우 이벤트 파생을 중지 시키시면 안됩니다. 이럴 경우 TouchMove와 TouchEnd가 발생되지 않는다는 생각을 하시고 해당 경우에따라 처리를 해주셔야 합니다.

 

 

저작자 표시 비영리
신고

'Mobile > Android Web' 카테고리의 다른 글

Android 4.0 Web Touch Event Bug (Galaxy Note, Galaxy S3 ...)  (0) 2012.08.01
Posted by 코멧'★
Mobile/Android APP Dev2011.03.15 11:30

Activity 또는 콤포넌트를 찾지 못하는 경우 발생하게 된다.

이럴경우 대부분의 오류는 Activity를 Manifast 파일에 등록을 시키지 않았거나 오타일 가능성이 높다.

만약 안드로이드 콤포넌트를 확장해서 재정의한 경우라면

생성자를 모두 정의하지 않았을 경우에도 발생할 수 있다.

이 오류의 경우 가장 먼저 살펴봐야하는건 일단 클래스명에 오타가 없는지 확인하고

Activity를 정의한 경우라면 Manifast파일에 제대로 추가했는지 확인하여야 하며

콤포넌트를 확장해 사용한 경우라면 모든 생성자를 오버라이딩 해주었는지 살펴봐야한다.
저작자 표시 비영리
신고
Posted by 코멧'★
Mobile/Android APP Dev2011.01.13 13:26


안드로이드 Activity 생명주기 발생시기

처음 생성시
onCreate()
onStart()
onResume()

Home 키 눌러서 종료시
onPause()
onStop()

재실행시
onRestart()
onStart()
onResume()

실행상태에서 다른 Activity로 전환시
onPause()
onCreate() -- Activity2
onStart() -- Activity2
onResume()  -- Activity2

Activity2에서 뒤로 가기 버튼 작동시
onPause()  -- Activity2
onRestart() -- Activity1
onStart() -- Activity1
onResume() -- Activity1
onStop() -- Activity2
onDestroy() -- Activity2

참고사항
그림에서 보는바와 같이 Activity가 onPause 상태나 onStop() 상태에서 다른 애플리케이션이 메모리 사용을 요청하여
메모리가 부족해질시 안드로이드 Process에서 Activity를 죽인다. 이때 다시 원래의 Activity를 실행시키면
onRestart()가 아닌 onCreate()가 실행된다.

저작자 표시 비영리
신고
Posted by 코멧'★

티스토리 툴바