마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android webView 관련 문의드립니다(화면 흰색배경으로 보이는현상)

0 추천
하이브리드 앱을 작업중에 이슈가 발생하여 문의드립니다

사용중이앱(A app)을 웹뷰를통해 사용중 다른앱(B app)을 사용하기위해 onPause() 호출(사용중인 앱을 내립니다)
이후 사용했던 앱(A app)으로 이동시 웹뷰가 백화현상(배경에 아무것도 안보이고 흰색 배경으로 보이는현상)이 발생하고 있습니다

사용중에 하드웨어가속과 소프트웨어가속 사용중 문제 발생하는 부분이 있습니다
사용중인 웹뷰클래스에 적용된 코드입니다

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

하드웨어 가속을 사용하는 폰중 안드로이드폰(7.x 버전에서 주로 발생)에서 사용중인 앱(A app)을 내리고
다른앱(B app)으로 사용후 다시 사용중(A app)이였던 앱을 실행시 백화현상이 나는 현상이 있습니다

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);<- 적용된부분을 하드웨어가속(webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);) 변경시
} else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

하드웨어 가속을 소프트웨어 가속으로 변경시 적용을하면 백화현상이 발생하는
문제는 사라지지만 화면에 스크롤을 할경우 버벅거리는 현상과
스크롤이 팅기면서 최상단,최하단으로 스크롤이 적용되는 현상이 발생합니다
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) -> webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
} else {
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

 

웹뷰이슈관련 검색을 해본결과 아래와같은 처리하면 문제를 수정한부분이있어
웹뷰를 사용하다보면 페이지가 하얗게 되면서 아무것도 보이지 않을 때가 발생하는데
이유는 페이지에서 사용하는 javascript가 정상적으로 동작하지 않아 페이지를 보여주지 못하는 것이라고 하여
아래와 같은 코드를 적용하였지만 백화현상 동일하게 발생하는 현상입니다

onResume() 적용  -> webView.resumeTimers();
onPause() 적용  -> webView.pauseTimers();

하이브리드앱을 작업후에 비슷한 경험또는 이런이슈를 해결하신분 있으시면 답변 부탁드립니다
안드로금메달 (160 포인트) 님이 2017년 12월 29일 질문
일단 webview 에 백화 현상은 자연스러운 현상입니다. 랜더링 되지 않은 화면을 보여주는 형태이며 이건 PC 용 브라우저도 동일한 현상이 일어납니다. (피해갈 수 없는 부분입니다.)

흰색이 다소 거슬리시면 webview 의 배경색을 검정으로 변경하시거나 page 가 로드 되기전에는 splash 를 띄우시는 형태로 피해가는 방법을 이용하시는걸 권해 드립니다.

코딩을 새롭게 하실 여건과 시간이 되신다면 AMP(https://www.ampproject.org/learn/overview/) 규격에 맞게 코딩하면 화면 갱신에 좀 더 도움이 될 것입니다.
먼저 답변을 달아주셔서 감사드립니다 aucd29님
aucd29님 말대로 랜더링을 하고난 이후 백화현상이 나는 현상은 어떤식으로 처리를 해야될까요?
new Handler().ppostDelayed 를(딜레이시간 1초) 사용하여  webView.invalidate(); 적용한결과 화면을 잠깐 그렸다가 백화현상이 되는현상이 발견된 사항이면 화면을 잠깐 그리고(랜더링한이후) 깜빡거림이후 다시 백화현상으로 변경되어 화면이 하얗게되는 현상은 어떤식으로 적용을 해야되는 건지 알고 계신다면 답변 부탁드립니다
백화를 근본적으로 해결할 방법은 없어 보입니다.  

loading 화면을 이용할 때도 있고 resize 할 경우는 화면을 캡쳐해서 로딩 완료 이후 출력하기도 하고 그렇습니다만 눈속임이였거든요, 우선 렌더링 처리하게 하는 AMP 가 그나마 좋은 결과를 보여줍니다.

1개의 답변

0 추천

I also encounter the same problem. gmail login hotmail sign in

ellascott (220 포인트) 님이 2017년 12월 29일 답변
...