android - working - webview setrendererprioritypolicy



WebView가 인스턴스화 된 후 WebView의 컨텍스트를 변경할 수 있습니까? (1)

WebView 를 가지고 있기 때문에, 다른 Activity (첫 번째부터 시작됨)에서 바로 팝업되도록 사전로드 된 활동을로드 중입니다.

문제는 WebView 를 인스턴스화하기 위해 Context 를 전달해야한다는 것입니다.이 경우에는 위에서 언급 한 첫 번째 Context 입니다.

그래서 그것은 잘 작동하고 두 번째 ActivityWebView 를 잘 보여줍니다. 문제는 WebView 에서 <select> 드롭 다운을 클릭하면 선택기 대화 상자가 WebView 아래에 표시된다는 것입니다. 다시 선택 버튼을 누르고 부모 활동으로 돌아 가기 직전에 선택 대화 상자가 잠깐 보일 때까지 선택이 전혀 작동하지 않는 것처럼 느껴집니다.

그것은 마치 두 번째 활동의 레이아웃에 WebView 를 추가 할 때 모달이 해당 활동의 창에 첨부되지만 WebView 자체는 상위 활동 창에 연결되므로 계층의 상위 지점에 표시됩니다.

인스턴스화 된 WebViewContext 를 어떻게 변경합니까?

이 문제는 해결하기가 매우 어렵습니다. 작업을 시작하기 전에 WebView를 만들어야하지만 선택 대화 상자가 필요합니다.

누구든지 나에게 통찰력을 줄 수 있다면 제게 크게 감사하겠습니다.

SDK 프로젝트 용이므로 부모 작업에 액세스 할 수 없습니다. 또한 WebView 표시되는 내용의 대부분이 JavaScript에 의해 생성되고 전체 DOM 스택이 전송되지 않기 때문에 saveState가 작동하지 않습니다.


MutableContextWrapper 를 사용하여 WebView를 만들 수 있습니다.

MutableContextWrapper mMutableContext=new MutableContextWrapper(context);
WebView mWebView=new WebView(mMutableContext);

나중에 당신이 할 수 있어요.

mMutableContext.setBaseContext(newcontext);

하지만 ...

  • WebView는 전달 된 컨텍스트를 사용하여 Handler와 같은 다른 객체를 만드는 매우 복잡한 구성 요소입니다. WebView는 아마도 원래 UI 스레드에 내용을 게시하기 위해 이러한 핸들러를 사용합니다. 따라서 최종적으로 컨텍스트가 혼합되어있는보기가있을 것입니다. 아시다시피 이중 메모리 누출 (정상적으로 작동하는 경우)

  • Webview는 최소한 하나의 스레드 "webcore"에 걸쳐 처리가 발생하는 곳이며 핸들러가있는 원래 UI 스레드와 지속적으로 통신하고 있습니까? 원래 컨텍스트를 통해? 누가 알아!

  • 2 가지 다른 웹뷰 엔진이 있습니다 : Kitkat은 크롬 기반이며, 젤리 빈과 이전 버전은 AOSP / WebView를 사용합니다. 따라서 추가적인 단점이 있습니다.

  • 당신이 말하는 이유는 충분히 강하지 못합니다. WebView는 그다지 느리지 않습니다. 로드하는 앱이 최적화되어 있다면 시도해보십시오. 내부 자산에서 HTML 및 그래픽을로드하는 것과 같이 할 수있는 많은 작업이 있습니다.





webview