2

我有一个使用RelativeLayout 来保存webview 的片段,并为其分配了一个自定义WebChromeClient。当我使用 webview 观看 Youtube 视频时,它可以在单独的视图中显示视频。但是,当我退出单独的视图并返回 webview 时,应用程序崩溃了。

/*Here is part of my WebChromeClient*/
public class CustomWebChromeClient extends WebChromeClient {

    /*Function for showing video separate from webview*/
    public void onShowCustomView(View view, CustomViewCallback callback) {
        frag.mCustomViewCallback = callback;

        //mTargetView is used as a video holder for holding the video object
        frag.mTargetView.addView(view);
        //mCustomView is the video object itself
        frag.mCustomView = view;
        //hide webview      
        frag.webview.setVisibility(View.GONE);  
        //show video holder with its video
        frag.mTargetView.setVisibility(View.VISIBLE);

        frag.mTargetView.bringToFront();

    }

    @Override
    public void onHideCustomView() {

        if (frag.mCustomView == null)
            return;

        //(I guess) use callback to hide video player widget such as play button and timebar
        frag.mCustomViewCallback.onCustomViewHidden();
        //remove video object from holder
        frag.mTargetView.removeView(frag.mCustomView);
        //hide video
        frag.mCustomView.setVisibility(View.GONE);
        frag.mCustomView = null;
        //hide video hodler
        frag.mTargetView.setVisibility(View.GONE);
        //show webview again
        frag.webview.setVisibility(View.VISIBLE);


    }

    /*... some other codes ...*/
}   

在我的主要片段活动中

/*Hide video holder when back key pressed*/
public void onBackPressed() {
    /*if is showing video, hide the view*/
    if(isShowingVideo){
        myWebChromeClient.onHideCustomView();
    }
}

详细情况:
1.在我的webview
2.打开Youtube
3.转到其中一个视频页面
4.点击视频的播放图标
5.[重要]当它还在加载时(在视频上保持黑色),点击全屏按钮假如。
6.触发onShowCustomView功能,然后全屏视频显示(隐藏webview只显示视频视图)
7.视频播放几秒钟
8.按返回键,触发onHideCustomView。(隐藏视频视图只显示webview)
9. webview 的视频已调整大小,大约 1~2 秒,应用程序崩溃并收到一些错误消息。

错误消息:
向 ErrorReportUtils 报告 WebCore 崩溃:

Thu Dec 11 17:37:11
Fatal signal 11 (SIGSEGV) at 0x000030de (code=0), thread 12526 (WebViewCoreThre)
[unnamed-12510-1] updateTexImage: SurfaceTexture is not attached to an OpenGL ES context

我发现了什么:
1. 不使用“mCustomViewCallback.onCustomViewHidden();” 在 onHideCustomView() 内部,应用程序不会崩溃,
但由 mCustomView(视频对象)创建的视频播放器小部件仍然存在。
2.在情况5,如果我等到视频内容显示,然后单击全屏按钮,应用程序在情况6~8之后可以正常工作。

4

0 回答 0