programing

Android 웹 보기 느림

javajsp 2023. 8. 17. 20:45

Android 웹 보기 느림

나의android webviews느립니다.이것은 전화기부터 전화기까지 모든 것에 있습니다.3.0+ 사양

는 웹 것을 , 저는 종류의 폰 웹 .CSS3그리고.JQuery 훌륭하고 .

그래서 뭔가를 놓치고 있어요, 뭔가가 있나요?myWebview.SPEEDHACK(1)속도를 높이는 데 사용할 수 있을까요?

또한 때때로 웹 뷰의 내용이 로드되지 않고 천천히 로드되는 대신 로드되지 않습니다.테스트 중인 자산은 로컬에 저장되며 오류가 없습니다.

로드되는 웹 응용 프로그램에 따라 다릅니다.다음 방법 중 몇 가지를 사용해 보십시오.

렌더링 우선 순위를 높게 설정합니다(API 18+에서 사용되지 않음).

webview.getSettings().setRenderPriority(RenderPriority.HIGH);

하드웨어 가속 사용/사용 안 함:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    // chromium, enable hardware acceleration
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    // older android version, disable hardware acceleration
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

캐시를 비활성화합니다(콘텐츠에 문제가 있는 경우).

webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

추가하기android:hardwareAccelerated="true"에서 저에게 있어서 이 크게 향상된 매니페스토에서만 했습니다.

자세한 내용은 http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel 에서 확인할 수 있습니다.

우리를 위한 해결책은 반대였습니다.다음 코드를 사용하여 (매니페스트의 전체 앱이 아닌) WebView에서만 하드웨어 가속을 비활성화했습니다.

if (Build.VERSION.SDK_INT >= 11){
    webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

CSS3 애니메이션은 이제 더 매끄럽습니다.우리는 안드로이드 4.0을 사용하고 있습니다.

자세한 내용은 https://code.google.com/p/android/issues/detail?id=17352 에서 확인할 수 있습니다.

저는 다음이 가장 효과적이라고 생각합니다.

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

Android 19에는 웹 뷰용 크롬 엔진이 있습니다.하드웨어 가속이 더 잘 되는 것 같습니다.

저는 폰갭 앱에서 렌더 성능 문제를 해결하기 위해 모든 제안을 시도했습니다.하지만 아무 것도 효과가 없었습니다.

마침내, 하루 종일 검색한 후에, 저는 그것을 만들었습니다.Android Manifest의 태그가 아닌 태그 내에서 설정한 경우

<application android:hardwareAccelerated="false" ...

이제 앱은 내 웹 브라우저와 동일한 속도로 작동합니다.하드웨어 가속이 항상 최고의 기능은 아닌 것 같습니다.

제가 겪었던 세부적인 문제는 https://stackoverflow.com/a/24467920/3595386 입니다.

저도 같은 문제를 겪고 있었고 해결해야 했습니다.저는 이러한 해결책들을 시도했지만, 마지막에는 적어도 스크롤링이 전혀 개선되지 않았습니다.그래서 여기서 제가 수행한 작업과 왜 그것이 저에게 효과가 있었는지에 대한 설명이 있습니다.

"MiWebView" 클래스를 만들고, "onTouchEvent" 메서드를 덮어쓰고, 적어도 모든 드래그 이벤트가 발생하는 시간을 인쇄하여 드래그 이벤트를 조금만 탐색할 수 있다면, 드래그 이벤트가 9ms(최대)만큼 떨어져 있다는 것을 알 수 있습니다.그것은 사건 사이의 매우 짧은 시간입니다.

WebView 소스 코드를 보고 onTouchEvent 기능을 확인하십시오.프로세서가 9ms 이내에 처리하는 것은 불가능합니다(계속 꿈을 꾸세요!!!).이러한 이유로 "WebCore의 터치다운 응답을 기다리는 동안 끌지 마십시오." 메시지가 계속 표시됩니다.코드를 제 시간에 처리할 수 없습니다.

어떻게 고칠까요?첫째, onTouchEvent 코드를 다시 작성하여 개선할 수 없습니다. 너무 많습니다.그러나 드래그 이동에 대한 이벤트 속도를 40ms 또는 50ms로 제한하기 위해 "모킹"할 수 있습니다.(이것은 프로세서에 따라 다릅니다.)

모든 터치 이벤트는 다음과 같습니다. ACTION_DOWN -> ACTION_MOVE...ACTION_MOVE -> ACTION_UP.따라서 우리는 DOWN 및 UP 이동을 유지하고 MOVE 속도를 필터링해야 합니다(이들은 나쁜 사람들입니다).

이를 수행하는 방법은 다음과 같습니다(두 손가락 터치와 같은 이벤트 유형을 추가할 수 있습니다. 여기서 관심 있는 것은 단일 손가락 스크롤뿐입니다.).

import android.content.Context;
import android.view.MotionEvent;
import android.webkit.WebView;


public class MyWebView extends WebView{

    public MyWebView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    private long lastMoveEventTime = -1;
    private int eventTimeInterval = 40;

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        long eventTime = ev.getEventTime();
        int action = ev.getAction();

        switch (action){
            case MotionEvent.ACTION_MOVE: {
                if ((eventTime - lastMoveEventTime) > eventTimeInterval){
                    lastMoveEventTime = eventTime;
                    return super.onTouchEvent(ev);
                }
                break;
            }
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP: {
                return super.onTouchEvent(ev);
            }
        }
        return true;
    }
}

물론 WebView 대신 이 클래스를 사용하면 스크롤할 때 차이를 알 수 있습니다.

이는 솔루션에 대한 접근 방식일 뿐, WebView 사용 시 화면 터치로 인해 모든 지연 사례에 대해 완전히 구현되지는 않았습니다.하지만 이것이 제가 찾은 가장 좋은 해결책입니다. 적어도 저의 구체적인 필요에 대해서는요.

그 대답들 중 어느 것도 저에게 도움이 되지 않았습니다.

마침내 저는 이유와 해결책을 찾았습니다.그 이유는 많은 CSS3 필터(필터, -webkit-filter)였습니다.

해결책

HTML 본문에 클래스 "저품질"을 추가하기 위해 웹 페이지 스크립트에 웹 뷰 탐지를 추가했습니다.참고로 WebView 설정에서 사용자 에이전트를 설정하면 WebView를 쉽게 추적할 수 있습니다.그리고 새로운 CSS 규칙을 만들었습니다.

body.lowquality * { filter: none !important; }

웹 뷰의 일부 구성 요소만 느리거나 지연되는 경우 이를 CSS 요소에 추가해 보십시오.

transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);

이것이 제 웹 뷰에 실제로 영향을 미친 유일한 속도 해킹이었습니다.하지만 과도하게 사용하지 않도록 주의하세요! ( 기사에서 해킹에 대한 자세한 내용을 읽을 수 있습니다.)

사용해 보십시오.

mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

에 바인딩된 경우onclick이벤트, 터치 스크린에서 속도가 느릴 수 있습니다.

더 빨리 만들기 위해, 저는 클릭 이벤트를 모방하기 위해 훨씬 더 빠른 터치 이벤트를 사용하는 패스트 클릭을 사용합니다.

언급URL : https://stackoverflow.com/questions/7422427/android-webview-slow